1

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

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

Однако недолговечное обслуживание существует и уничтожается до того, как менеджер местоположения получит событие изменения местоположения, и, таким образом, слушатель обратного вызова не срабатывает, или я получаю "sending message to a Handler on a dead thread" errors like this.

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

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

+0

Как работает WearableListenerService? –

+0

Через MessaeApi с сообщением, отправленным с носящего устройство – cpjolicoeur

+0

Вы выяснили какое-либо хорошее решение для этого? –

ответ

-1

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

+0

Думаю, мне больше любопытно «механизм блокировки». Независимо от того, происходит ли блокирование во вторичном IntentService 'onHandleIntent()' или внутри моего существующего WearableListenerService, мне все равно нужно блокировать, пока происходят обновления местоположения запроса. Каков предпочтительный/предписанный механизм блокировки таким образом, пока не будет запущен асинхронный обратный вызов? Или, может быть, я просто не понимаю ваш подход. – cpjolicoeur

+0

Вы должны заблокировать внутри IntentService # onHandleIntent(), поскольку это будет в рабочем потоке; вот и все, что стоит за началом IntentService. –

+0

Блок как? Какой механизм используется для фактического блокирования этого потока? Просто простой тайм-аут ожидания? – cpjolicoeur

Смежные вопросы