Android LocationManager requestLocationUpdates в службе WearableListenerService

Мне интересно, как (если это возможно) успешно запустить requestLocationUpdates для меня LocationManager внутри недолгой службы - в этом случае Android WearableListenerService,

Например, у меня есть служба, которая запускается, когда носимые устройства отправляют сообщение о необходимости обновления. Часть этого обновления - запросить у внешнего API некоторые данные в зависимости от текущего местоположения пользователя. Если "последнее известное" местоположение не возвращается из getLastKnownLocation Я регистрируюсь для requestLocationUpdates из диспетчера местоположений, чтобы получить текущее местоположение устройства, а затем сделаю свое дело.

Однако недолговечный сервис существует и уничтожается до того, как диспетчер местоположений получает событие изменения местоположения, и, таким образом, прослушиватель обратного вызова не срабатывает, или я получаю сообщения об "отправке сообщения обработчику в мертвом потоке", подобные этой.

Мой вопрос, могу ли я заставить эту службу более или менее блокировать, пока не будет найдено местоположение и onLocationChanged обратный вызов срабатывает перед выходом (onDestroy) называется?

Или каков правильный / правильный механизм для этого?

1 ответ

Один из подходов состоит в том, чтобы запустить IntentService изнутри вашего WearableListenerService. В IntentService вы можете отправить свой запрос местоположения в onHandleIntent(), и вы можете заблокировать его, пока не получите свой ответ (с тайм-аутом, мы надеемся); поскольку onHandleIntent вызывается в рабочем потоке, никаких проблем не возникает. Когда вы получите результат обратно, вы можете обновить ваше носимое приложение; этот подход кажется довольно простым.

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