2011-01-26 2 views
0

기기가 부팅되는 동안 백그라운드에서 실행되는 위치 서비스가 있습니다. LocationManager requestLocationUpdate 메서드를 호출하여 네트워크 및 GPS 공급자 업데이트를 요청했지만 위치 서비스를 사용하거나 사용하지 않도록 설정하여 내 위치 설정 페이지를 변경하면 onProviderEnabled 또는 ProviderDisabled가 호출되지 않습니다. 따라서 사용자가 위치 설정을 변경할 때마다 내 백그라운드 서비스가 어떻게 알림을받을 수 있는지 알고 싶습니다. 브로드 캐스트 메시지를 캐시하는 리시버 모드에서이를 수행 할 수 있습니까?android : 사용자가 내 위치 설정 위치 서비스를 사용 또는 사용 중지 할 때 알림을받는 방법

+1

"장치를 부팅하는 동안 백그라운드에서 실행되는 위치 서비스가 있습니다." - 제발 하지마. 'requestLocationUpdates()'의'PendingIntent' 버전을 사용하거나'AlarmManager'과 my ['LocationPoller'] (https://github.com/commonsguy/cwac-locpoll) 같은 것을 사용하여 폴링하십시오. – CommonsWare

+0

정직하게 말하자면, 백그라운드에서 지속적으로 실행되는 위치 서비스는 결코 좋은 생각이 아닙니다. GPS와 데이터는 가장 많은 배터리를 소모하는 2 가지 서비스이며,이 폴링을 계속 남겨두면 평소보다 약 4 ~ 5 배 빠릅니다. 이것을 구현하려는 경우 주기적으로 위치 업데이트를 폴링해야합니다. –

답변

0

예, 서비스에서 GPS 방송을 수신 대기하는 확장 BroadcastReceiver 클래스를 구현할 수 있습니다. GPS가 켜지거나 꺼지더라도 onProviderEnabled() 메소드를 호출하지 않고 GpsStatus.OnGpsStatusChanged() 메소드를 호출합니다.

GPS_EVENT_STARTED GPS_EVENT_STOPPED

브로드 캐스트 수신기를 구현하는 방법에 BroadcastReceiver API를 참조하십시오

는 GPS가 변경 될 때 전송 된 방송은 이벤트 값이 있습니다.

+1

John이 답을 주셔서 감사합니다. 그러나 언급 한 방법은 GPS 설정에만 사용되며, 사용자가 네트워크 제공 업체 만 활성화하면 어떻게됩니까? – user591387

+1

gps 설정 변경은 이제 감지 될 수 있지만 네트워크 하나는 감지되지 않습니다. – user591387

+0

네트워크 제공 업체가 사용 또는 사용 중지 될 때를 감지하려면 ConnectivityManager 클래스를 사용해야합니다. http://developer.android.com/reference/android/net/ConnectivityManager.html 브로드 캐스트를 전송합니다. CONNECTIVITY_ACTION 상수는 다른 네트워크가 변경 될 때 알려주는 반면, 모바일 네트워크가 비활성화되면 String 상수 ACTION_BACKGROUND_DATA_SETTING_CHANGED를 사용합니다. 더 자세한 정보를 찾으려면 ConnectivityManager의 메서드를 사용해야합니다. –

관련 문제