Android: можно ли использовать Broadcast Receiver для периодической выборки GPS-местоположения без запуска службы?

1

Я хотел бы периодически выбирать местоположение GPS, скажем, каждые 10 минут. Я предполагаю, что лучший способ сделать это - использовать класс LocationManager с помощью метода:

public void requestLocationUpdates (String provider, long minTime, float minDistance, PendingIntent intent)

Это передало бы указанное намерение, которое я мог бы получить в широковещательном приемнике в моем приложении. Мой вопрос заключается в том, что, если я вызову этот метод из активности, будут ли остановки передачи, когда процесс, вызывающий requestLocationUpdate(), будет убит или эта регистрация останется активной, чтобы я мог продолжать получать обновления местоположения? Нужно ли мне оставлять запущенную службу, чтобы поддерживать обновления местоположения при переходе пользователя в разные приложения? Спасибо!

Теги:
geolocation

1 ответ

6
Лучший ответ

В основном то, что вы сказали, является правильным, насколько мне известно.

Я думаю, что регистрация должна оставаться активной, даже если Activity умирает, так как вы предоставили PendingIntent для LocationManager. Нет никакой зависимости от того, что ваша задача живая — PendingIntent содержит всю информацию, необходимую инфраструктуре.

От документы:

даже если его собственная заявка процесс убит, PendingIntent сама по себе останется пригодной для использования другими процессов, которые ему были предоставлены

В любом случае, это должно быть довольно просто проверить. Просто запустите обновления своего местоположения из своей деятельности или службы, затем зайдите в оболочку и убейте приложение и посмотрите, остается ли значок панели инструментов GPS, и вы получите Intent, как ожидалось.

Что касается оставления работы Service, этого следует избегать. Ваш PendingIntent может запустить службу для вас, оставив ее обработать входящее местоположение Intent, выполнить всю необходимую обработку и затем остановить себя (Service.stopSelf()). Он будет запущен снова, когда следующий Intent будет запущен с помощью LocationManager.

Просто убедитесь, что вы отменили регистрацию от получения обновлений местоположения в какой-то момент!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню