Android GPS-отслеживание и WakeLock

Мне нужно выполнить фоновое GPS-отслеживание на телефоне Android, и в настоящее время я планирую два сценария:

  1. Когда телефон подключен к (автомобильному) зарядному устройству, получите частые местоположения GPS (каждую минуту).
  2. Если телефон не подключен к зарядному устройству, опрашивайте местоположение только раз в 5–30 минут, в зависимости от того, насколько сильно повреждена батарея.

Я знаю, что мне нужно реализовать отслеживание в службе и, возможно, показать уведомление, чтобы служба оставалась работоспособной. Однако я полагаю, что телефон может перейти в спящий режим в любое время, что остановит отслеживание GPS.

Для этих сценариев, как лучше всего выполнять непрерывное фоновое GPS-отслеживание без перехода телефона в спящий режим и без чрезмерного потребления энергии?

На данный момент я собрал следующее:

Для в сценарии 1 мне, вероятно, понадобится WakeLock и все время держать ЦП в активном состоянии (но экран может спать). Приложение MyTracks, похоже, делает это в TrackRecordingService . OpenGPSTracking, кажется, делает то же самое .

Для сценария 2 я могу использовать AlarmManager для планирования проверки каждые x минут. Моему сервису нужно будет получить временный WakeLock, дождаться одного местоположения GPS, затем остановиться и снова разблокировать WakeLock.

Как будет сравниваться энергопотребление для этих двух методов (постоянный WakeLock и AlarmManager)? Может ли GPS определить точное местоположение за разумный промежуток времени, проверяя только каждые 30 минут?

Есть несколько связанных вопросов по StackOverflow, но ни один из них не дает удовлетворительных ответов. Некоторые полу-полезные:

5
задан Community 23 May 2017 в 12:24
поделиться