0

내 앱이 requestLocationUpdates (GPS 및 네트워크 중 먼저 발생하는 시점부터)을 사용 중입니다.requestLocationUpdates가 서비스에 대해 작동하지 않습니다.

내 코드 :

LocationManager lm = (LocationManager) context 
       .getSystemService(Context.LOCATION_SERVICE); 
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, 
        myLocationListenerInstance); 

timeout = new Timer(); 
timeout.schedule(myGetLastKnownLocationInstance, TIMEOUT); 

myGetLastKnownLocationInstance이 getLastKnownLocation을 사용하고 있습니다.

내 문제 :

현재 실행중인 작업에서이 코드를 호출의 myLocationListenerInstance이 TIMEOUT 초 이내에 통지를 받고있다.

그러나 백그라운드 서비스에서 호출 할 때 시간이 초과되고 마지막으로 알려진 위치를 통해 출력됩니다. 최악의 경우 측정 된 위치를 조사 할 때 타임 스탬프가 TIMEOUT보다 작습니다!

TIMEOUT을 1 분으로 설정하더라도이 동작이 나타납니다.

제안 사항? 감사합니다

답변

0

당신의 활동이 실행 중일 때 제대로 작동하지만 활동이 닫히고 백그라운드 서비스가 실행되기를 기대하면 코드가 백그라운드 서비스 내에서 예정대로 작동하지 않습니다.

백그라운드 서비스가 실행되고 있습니까?

AlarmManager, 끈적 끈적한 시작, 깨우기 잠금 및/또는 startForeground를 사용하여 코드 실행을 예상 할 때 서비스가 실행되고 있는지 확인해야 할 수 있습니다.

+0

문제는 기본 UI 스레드에서만 위치 업데이트를 요청할 수 있다는 것입니다. 그리고 분명히, 내 서비스에서, 나는 도우미 스레드를 사용하고 있었다.이걸 알면, 난 여전히 붙어있어 .. – Mugen

+0

@ 뮤 젠, 아니, 당신은 확실히 백그라운드 서비스에서 requestLocationUpdates를 호출 할 수 있습니다. 서비스 수명주기 및 스레드 처리에 대한 내용을 읽었을 것입니다. 내 생각 엔 서비스가 시작되었을 것입니다. 그런 다음 중지 ... 다시 위의 내 대답으로 돌아갑니다. – logray

0

내 문제 :

현재보다 TIMEOUT 초, myLocationListenerInstance이 점점 통지를 실행하는 활동에서이 코드를 호출. requestLocationUpdates (String provider, long minTime, float minDistance, LocationListener listener) 당으로

는 두 번째 매개 변수는 밀리 초, 당신은 위치 업데이트 사이의 최소 시간 간격을 설정할 수 있습니다. 안드로이드 API 문서에서

위에서 언급 :

위치 갱신 간격은 minTime 파라미터를 이용하여 제어 될 수있다. 위치 업데이트 사이의 경과 시간은 위치와 다른 응용 프로그램에서 요청한 업데이트 간격에 따라 다를 수 있지만 은 minTime보다 작지 않습니다.

당신은 TIMEOUT에 (귀하의 경우 0을입니다) minTime를 설정하고 타이머가 다른 곳에서 사용하지 않는 한, 전부 Timer을 놓을 수 있습니다.

관련 문제