но что, если мне действительно нужно последнее местоположение прямо сейчас, в сервисе, а не в активности?
Извините, но это невозможно, ни в сервисе, ни в активности.Например, если GPS-радио выключено, и вы запрашиваете данные о местоположении у GPS, потребуется всего несколько десятков секунд, чтобы получить исправление, и это если вам повезет.Это может вообще не исправить.
Как я могу дождаться обратного вызова и остановить возврат моего сервиса.
Нет.Вы делаете то, что сказали, что сделаете:
используйте getLastKnownLocation из locationManager, поскольку он не отвечает обратным вызовом
Итак, получите Service
(чтонадеюсь, IntentService
) проверит, имеет ли значение getLastKnownLocation()
значение.Если это так, используйте его.В противном случае, registerLocationUpdates()
, используя PendingIntent
, который передаст управление вашему IntentService
.Когда вы получите , что Intent
, используйте местоположение и отмените регистрацию для обновлений (при условии, что период тревоги хороший и длинный, как, скажем, один раз в час).
Все становится сложнее, еслиВаша тревога - тревога _WAKEUP.Затем вам нужно будет удерживать WakeLock
, чтобы устройство не засыпало, пока вы пытаетесь получить GPS-фикс.Тем не менее, вам нужно выпустить это WakeLock
когда-нибудь, и если мы не сможем исправить GPS ... ммм ... ну, это сложная часть.Попытка найти хороший и понятный способ справиться с этим и реализовать его как компонент многократного использования (например, LocationAlarmService
) - это один из 18 000 пунктов в моем списке дел.
Кроме того,в какой момент происходит обновление lastKnownlocation?GPS каждый раз регистрирует новое местоположение;он обновляет его?
AFAIK, да.