2010-06-10 2 views
3

Android 앱에서 개발 중이므로 LocationManager에서 위치 수정을해야합니다. 그 부분은 모두 훌륭하고 훌륭합니다. 그것은 작동하고 있습니다, 꽤 오랜 시간 동안 있었고, 모든 것이 행복했습니다.Android의 LocationManager가 requestLocationUpdates 호출의 변경 사항을 Droid에서만 무시합니다.

그러나 최근에 위치 추적 부분을 백그라운드로 이동할 수있는 기능이 추가되었으므로 배터리 전원을 절약하기 위해 위치 추적 부분의 업데이트 속도를 늦추고 싶습니다. 사실, 내가 이것을하려고하는 방식은 백그라운드 서비스가 더 이상 등록 된 청취자가 없다는 것을 감지하면 새로운 매개 변수를 사용하여 requestLocationUpdates 호출을 다시 발행하는 것입니다 (알림 표시 줄에 무언가를 제공하므로 여전히 업데이트). 그 서비스를 "Servicemajig"라고 부르 자. 내가하는 일은 짧게 :

private void setMode(boolean foreground) { 
    // This sets whether we're in foreground or background mode. If we're 
    // not changing anything, though, don't do anything. 
    if(foreground == mForeground) return; 

    // Set the current mode... 
    mForeground = foreground; 

    // ...and switch! 
    if(mForeground) { 
     // Foreground mode means we go full tilt. 
     Log.i(DEBUG_TAG, "Switching to foregroud mode..."); 
     mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, Servicemajig.this); 
    } else { 
     // Background mode means we slow down. Like, say, 30 seconds. 
     Log.i(DEBUG_TAG, "Switching to background mode..."); 
     mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 30000, 0, Servicemajig.this); 
    } 
} 

이제는 대부분이 방식으로 작동합니다. 이중 업데이트를받지 못합니다 (즉, 아직 등록을 취소하지 않았지만 여전히 트릭을 수행함). Nexus One과 G1에서 배경과 전경 모드를 적절히 전환합니다. 즉, 배터리 전원을 절약하면서 다른 위치 픽스를 얻으려고하기 전에 30 초 정도 기다렸다가 (주고받습니다).

문제는 Motorola Droid에서 테스트 할 때 발생합니다. 드로이드와 그 자체만으로는 배경 모드에 넣으면 30 초 (다시주고받습니다)의 픽스를 기다립니다.하지만 적어도 하나의 픽스가 그런 식으로 나타나면 리턴하지 않습니다. 나중에 전경 모드로 전환합니다. 즉, 포 그라운드 모드가 필요하고 요청한 실제 앱을 다시 입력 한 후에도 수정 당 30 초를 기다리지 만 Servicemajig를 종료하고 다시 시작하는 것 외에는이 문제를 해결할 수 없습니다. 로그는 코드의 해당 부분을 통과하고 있음을 보여 주므로 최소한 멀리는 벗어납니다.

제 질문은 Droid 펌웨어에만 해당되는 버그입니까? 이 문제를 해결할 수있는 방법이 있습니까? 또는 이것도 이와 같은 일을하는 올바른 방법일까요? registerLocationUpdates 호출을 사용하여 if 블록 앞에 removeUpdates 호출을 추가해도 상관 없습니다.

+0

기준 설정이 있습니까? – Skizit

+0

어떤 경우에도 기준을 설정하지 않았습니다. 나는 단순히 명시 적으로 사용할 수있는 공급자를 사용하고 있습니다. 내가 준 코드는 요약되어 있습니다. NETWORK_PROVIDER에서 위치 업데이트를 요청하고 업데이트 기준으로 받아 들일 수있는 항목을 정렬합니다. 그러나 Droid에서는 30 초가 지날 때까지 모든 제공 업체의 위치를 ​​찾으려고하지 않습니다. – CaptainSpam

답변

0

이것은 바보 같지만 각 장치와 OS 쌍의 종류가 다르게 나타납니다. 그래서 나는 Droid에서 이것을 보지 못했지만 나는 다른 휴대폰에서 그것을 보았습니다. 업데이트를 이미 수신하는지 여부를 추적 할 수 있으면 업데이트를 제거한 다음 다시 요청을 업데이트하십시오. 두 경우 (여러 요청 대 요청/제거)는 실제로 잘 문서화되지 않았습니다.

+0

다른 곳보다 Droid에서 다르게 구현 된 이상한 정의되지 않은 동작 일 것입니다. 어쨌든, 나는 궁극적으로 이것과 전혀 다른 방향을 취했다. 어쨌든 도움을 주셔서 감사합니다! – CaptainSpam

관련 문제