Android: обработка необязательного местоположения - PullRequest
1 голос
/ 31 октября 2010

У меня есть приложение для Android, которое может работать с или без местоположения.обработка этого случая в действии проста: я устанавливаю прослушиватель местоположения и жду с диалоговым окном хода выполнения, но позволяю пользователю прервать ожидание (бывает, что если поставщик местоположения отключен, то никакой особой ошибки просто не бываетвозвращает местоположение ... приятно).

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

вопрос в том, как справиться с этим делом в сервисе.я могу дождаться местоположения, но поскольку я не могу рассчитывать на прерывание пользователя, как я могу узнать, когда следует прекратить ожидание, и предположить, что местоположение недоступно?кажется, я мог бы сделать что-то вроде

  1. службы расписаний с действием «получить местоположение», которое устанавливает прослушиватель местоположения, ожидает обновления, планирует то же обслуживание, скажем, через 3 минуты с действием «обновить»
  2. в сервисном действии «обновить», найдите последнее известное местоположение и будьте счастливы с этим.было либо получено, либо нет.если он нулевой, мы знаем, что у нас нет местоположения, и мы сделали все возможное.

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

в любом случае, это становится довольно сложным, поэтому мне интересно, есть либолее простой способ.

1 Ответ

0 голосов
/ 24 декабря 2010

отвечая на мой собственный вопрос ... вот как я решил эту проблему,

UpdateService - служба намерений, которая фактически выполняет обновление.этот просто вызывает getLastKnownLocation () для получения местоположения.

LocationService - обычная служба, которая регистрирует обновления местоположения, а также устанавливает таймер для пробуждения через 2 минуты.либо мы получаем обновление местоположения, либо таймер отключается.если мы получаем обновление местоположения, мы отменяем таймер.в обоих случаях мы отменяем регистрацию для обновлений местоположения и запускаем UpdateService для выполнения фактической работы, а затем останавливаемся.

мы планируем LocationService как повторяющийся сигнал тревоги, чтобы быть нашим "фоновым" процессом.деятельность обрабатывает вещи по-разному.он запрашивает обновления местоположения и открывает диалог.мы либо получаем обновление местоположения, либо пользователь отменяет диалог.в любом случае, мы отменяем регистрацию для обновлений местоположения, затем запускаем UpdateService напрямую (не LocationService, мы уже получили местоположение здесь).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...