Geofences недоступен и как его обрабатывать

Я работаю с geofences на android, все работает отлично на большинстве телефонов, но на некоторых из них он просто не работает (показывая «геофотоснимки недоступны» в моих журналах ошибок).

У некоторых пользователей отсутствует отслеживание местоположений для служб Google Play. Я думаю, что именно поэтому Geofencing не работает на своих телефонах. (правильно?)

Теперь я хочу найти способ обнаружить это. (Сообщите об этом пользователю и в конечном итоге покажите им, как его исправить). Я знаю, что есть способ узнать, доступны ли сервисы google play или нет (и я уже это сделал), но это ничего не говорит о включенных службах определения местоположения или нет.

Я знаю, что я могу проверить его при добавлении или удалении геопотенциала, есть код ошибки для него (недоступные геофотоснимки Коды состояния местоположения ), но этого недостаточно. Некоторые пользователи отключают службы определения местоположения после добавления геофорумов. Тогда я не знаю этого, и мое приложение не будет работать. (Жалобы пользователей и т. Д.). По крайней мере, я должен сообщить пользователю, когда они откроют приложение, чтобы проверить, что случилось.

Кто-нибудь имеет представление о том, как это сделать? Лучшее, что я могу сделать сейчас, это добавить и удалить фиктивный geofence при загрузке приложения, но должен быть лучший способ?

EDIT: я тестировал его с устройством, у которого была проблема, удаление приложения и переустановка, похоже, устраняют проблему. Я не делаю ничего особенного при первой загрузке, так что это действительно странно. Похоже, что существует проблема с подключением к игровым сервисам google, и переустановка приложения делает что-то особенное с этими службами. Это возможно? Он не дает ошибок при подключении к ним, но это было, когда я пытался установить геозоны (см. Выше).

Геофоны будут отключены (и незарегистрированы), если по какой-либо причине поставщик GPS или сетевой провайдер отключены. Это приведет к onAddGeofencesResult() с кодом состояния ошибки (1000). Вы можете обнаружить это прямо здесь.

Или вы обнаруживаете это, внедряя приемник, который вызывается в ответ на android.location.PROVIDERS_CHANGED . Не забудьте добавить приемник в AndroidManifest

 <receiver android:name=".service.GeofenceProvidersChangedBroadcastReceiver"> <intent-filter> <action android:name="android.location.PROVIDERS_CHANGED"/> </intent-filter> </receiver> 

В реализации приемника на onReceive() получите менеджер местоположений и проверьте статус провайдеров:

 public class ProvidersChangedBroadcastReceiver extends WakefulBroadcastReceiver { : : @Override public void onReceive(Context context, Intent intent) { LocationManager locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE); if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) { // GPS_PROVIDER IS enabled... } else { // GPS_PROVIDER is NOT enabled... } if (locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) { // NETWORK_PROVIDER IS enabled... } else { // NETWORK_PROVIDER is NOT enabled... } : : : if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER) && locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) { // We are good for geofencing as both GPS and Network providers are enabled.... } : : : }