Я хотел бы периодически выбирать местоположение GPS, скажем, каждые 10 минут. Я предполагаю, что лучший способ сделать это - использовать класс LocationManager с помощью метода:
public void requestLocationUpdates (String provider, long minTime, float minDistance, PendingIntent intent)
Это передало бы указанное намерение, которое я мог бы получить в широковещательном приемнике в моем приложении. Мой вопрос заключается в том, что, если я вызову этот метод из активности, будут ли остановки передачи, когда процесс, вызывающий requestLocationUpdate(), будет убит или эта регистрация останется активной, чтобы я мог продолжать получать обновления местоположения? Нужно ли мне оставлять запущенную службу, чтобы поддерживать обновления местоположения при переходе пользователя в разные приложения? Спасибо!
В основном то, что вы сказали, является правильным, насколько мне известно.
Я думаю, что регистрация должна оставаться активной, даже если Activity
умирает, так как вы предоставили PendingIntent
для LocationManager
. Нет никакой зависимости от того, что ваша задача живая — PendingIntent
содержит всю информацию, необходимую инфраструктуре.
От документы:
даже если его собственная заявка процесс убит, PendingIntent сама по себе останется пригодной для использования другими процессов, которые ему были предоставлены
В любом случае, это должно быть довольно просто проверить. Просто запустите обновления своего местоположения из своей деятельности или службы, затем зайдите в оболочку и убейте приложение и посмотрите, остается ли значок панели инструментов GPS, и вы получите Intent
, как ожидалось.
Что касается оставления работы Service
, этого следует избегать. Ваш PendingIntent
может запустить службу для вас, оставив ее обработать входящее местоположение Intent
, выполнить всю необходимую обработку и затем остановить себя (Service.stopSelf()
). Он будет запущен снова, когда следующий Intent
будет запущен с помощью LocationManager
.
Просто убедитесь, что вы отменили регистрацию от получения обновлений местоположения в какой-то момент!