Android LocationManager requestLocationUpdates в службе WearableListenerService
Мне интересно, как (если это возможно) успешно запустить requestLocationUpdates
для меня LocationManager
внутри недолгой службы - в этом случае Android WearableListenerService
,
Например, у меня есть служба, которая запускается, когда носимые устройства отправляют сообщение о необходимости обновления. Часть этого обновления - запросить у внешнего API некоторые данные в зависимости от текущего местоположения пользователя. Если "последнее известное" местоположение не возвращается из getLastKnownLocation
Я регистрируюсь для requestLocationUpdates
из диспетчера местоположений, чтобы получить текущее местоположение устройства, а затем сделаю свое дело.
Однако недолговечный сервис существует и уничтожается до того, как диспетчер местоположений получает событие изменения местоположения, и, таким образом, прослушиватель обратного вызова не срабатывает, или я получаю сообщения об "отправке сообщения обработчику в мертвом потоке", подобные этой.
Мой вопрос, могу ли я заставить эту службу более или менее блокировать, пока не будет найдено местоположение и onLocationChanged
обратный вызов срабатывает перед выходом (onDestroy
) называется?
Или каков правильный / правильный механизм для этого?
1 ответ
Один из подходов состоит в том, чтобы запустить IntentService изнутри вашего WearableListenerService. В IntentService вы можете отправить свой запрос местоположения в onHandleIntent(), и вы можете заблокировать его, пока не получите свой ответ (с тайм-аутом, мы надеемся); поскольку onHandleIntent вызывается в рабочем потоке, никаких проблем не возникает. Когда вы получите результат обратно, вы можете обновить ваше носимое приложение; этот подход кажется довольно простым.