2012-01-25 3 views
0

사용자 위치 정보를 캡처하는 장면에서 계속 실행해야하는 서비스 (wakelock 포함)가 있습니다. ServiceLocationListener 방법 (즉, onLocationChanged())을 구현합니다.Android GPS 서비스 문제

그러나 onLocationChanged()이 전화로 호출되기까지 시간이 걸리므로 내 서비스는 무언가를해야합니다. Thread.sleep()을 사용하려고 생각했지만 전화가 onLocationChanged()을 호출하지 못하도록할까요? 아니면 폴링을해야합니까? while (i < 1000,000) {++ i;}?

이러한 아이디어 중 하나를 사용하여 풍부한 GPS 결과를 얻지는 못합니다. 아무도 나에게 이것을 수행하는 방법에 대한 팁을 줄 수 있는지 궁금해.

+0

코드를 업로드 할 수 있습니까? – Lucifer

+0

위치 업데이트를 요청한 후 위치 (특히 첫 번째 위치)에 잠시 시간이 걸리는 것은 정상입니다. 서비스가 다른 작업을 수행해야하는 경우 수행해야하는 작업을 호출하십시오. onLocationChanged를 기다리는 동안 서비스가 차단되지 않습니다. 하지만 나는 100 % 내가 문제의 전체를 이해하고'Thread.sleep()'을 호출해야하는 이유를 알지 못한다. – Jakar

+0

적시에 GPS 기록을해야합니다 (예 : 하루에 1 분마다 한 번, 밤에 5 분마다 한 번). 하지만 나는 무엇을 선택해야할지 모르겠다. Thread.sleep (30k)은 onLocation() 메서드를 차단하거나 배터리를 소모 할 수있는 바쁜 대기를 차단한다고 생각한다. – Exegesis

답변

0

WakeLock (배터리 낭비) 제거, 10 초 대기/스레드 절전 (onLoc()의 GPS 호출을 차단하는 경우), AlarmManager를 사용하여 장치를 깨우기 잠을 자고 서비스를 시작하십시오.

이것은 수면 중에 GPS를 수신하고 배터리 전원을 소모하지 않습니다.

1

wait()을 사용하고 LocationListener 인스턴스와 블록을 동기화하여 notify()를 사용할 수 있다고 생각합니다. wait(), notify()를 사용하여 샘플을 검색하십시오.

1

위치 변경 정보를 기다리는 동안 서비스를 "활성"상태로 유지하고 싶습니다. 그것은 시스템에 의해 처리되며 코드를 추가 할 필요가 없습니다. 위치 변경 정보를 사용할 수있게되면 onLocationChanged()가 서비스 컨텍스트에서 호출됩니다.