Как получить уведомление, когда Службы Google Play не могут получить информацию о местоположении?

У меня есть приложение для Android, которое должно определить его текущее местоположение (с помощью Google Play Services LocationClient), а затем отправить его обратно на сервер. Это должно происходить в фоновом режиме через равные промежутки времени, например, каждые 5 минут

Этот код работает очень хорошо, и он обычно доставляет местоположения каждые 5 минут в течение нескольких секунд. Проблема возникает, когда Android не может получить исправление. В этих условиях я ожидал, что обратный вызов будет запущен через 5 минут с объектом NULL, но этого не происходит. Приложение просто продолжает искать местоположения, даже не вызывая обратный вызов.

Я вызываю метод requestLocationUpdates моего LocationClient с объектом locationRequest, созданным следующим образом

locationrequest = LocationRequest.create();
locationrequest.setInterval(5 * 60 * 1000);  
locationrequest.setFastestInterval(3 * 60 * 1000);
locationrequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
locationrequest.setExpirationDuration(45 *1000);
locationclient.requestLocationUpdates(locationrequest, mPendingIntent);

Я не могу найти подходящий способ, чтобы LocationClient звонил мне каждые 5 минут, даже если он не может определить местоположение. Я ценю, что у меня может быть сигнал тревоги, который срабатывает каждые 5 минут, а затем отправляет самое последнее местоположение обратно на сервер, но я надеялся обработать отправку в рамках обратного вызова.

Кто-нибудь еще должен был справиться с этой ситуацией, или есть идеи, как ее решить?

1 ответ

Я не знаю, что вы делаете в остальной части кода, но я думаю, что вам просто нужно управлять своим LocationRequest а также LocationClient по отношению к методам жизненного цикла Activity или же Fragment Вы звоните им из.

Хорошим примером является учебное пособие по обновлению местоположения, а также этот пост из блога разработчиков Android.

Поскольку ваше приложение должно быть подключено к LocationClient получать обновления, если вы включаете и выключаете эти обновления во время, скажем, onResume() или же onCreate() а также onStop() Вы эффективно запускаете таймер, только когда ваше приложение находится на переднем плане. Затем, как предполагает сообщение в блоге разработчика, когда ваше приложение находится в фоновом режиме, вы можете переключиться на пассивный слушатель местоположения, который все еще может получать обновления, но не использует тот же подход, основанный на таймере. Когда ваше приложение вернется на передний план, вы можете отключить пассивного слушателя, подключиться к Google Play Services и запустите свой 5-минутный таймер снова.

Другие вопросы по тегам