У вас здесь несколько проблем.
Я установил будильник с флагом RTC_WAKEUP, чтобы каждые 30 секунд запускать IntentService для передачи обновлений местоположения на сервер.
Во-первых, вы можете даже не получить свое первое исправление в течение 30 секунд, особенно если вы используете GPS.Вы должны принять во внимание, что вы можете никогда не получить исправления (например, пользователь находится под землей).
Во-вторых, пожалуйста, позвольте этой фигуре настраиваться пользователем, включаяопция для "я буду загружать данные вручную, пожалуйста".Как указывает @piotrpo, это приводит к значительному разряду батареи.На самом деле, если вы используете GPS, я сомневаюсь, что батарея будет работать дольше, чем пару часов.
В-третьих, IntentService
не будет хорошо работать в этом случае, потому что IntentService
закроетсявниз, пока не пришло твое исправление.В лучшем случае вы потеряете память.В худшем случае вы не получите исправления, потому что Android завершает ваш процесс.
Лучшее решение для фоновых проверок местоположения - использовать обычный Service
, а не IntentService
.Обычная служба регистрирует LocationListener
в onStartCommand()
, а также организует уведомление о превышении времени ожидания (например, AlarmManager
и set()
), если исправление недоступно.Когда появится исправление, запустите AsyncTask
, чтобы выполнить загрузку.После завершения AsyncTask
или по истечении времени ожидания, когда вы не получили исправления, отмените регистрацию слушателя и вызовите stopSelf()
, чтобы закрыть службу.Попутно вам нужно будет поддерживать свой собственный WakeLock
, чтобы держать устройство в активном состоянии, пока все это происходит.
Пример большей части этого (за исключением части загрузки на сервер) см.my LocationPoller
.
Если вы не уверены в том, что это происходит каждые 30 секунд или около того, вы можете вообще не беспокоиться о AlarmManager
.Вы должны иметь постоянный сервис, работающий постоянно, с постоянным WakeLock
и постоянным LocationListener
.Когда исправления появятся в onLocationChanged()
, загрузите их, если они более 30 секунд от предыдущего.И обязательно надевайте огнестойкий костюм при выпуске приложения, поскольку тем, кто его запускает, результаты могут не понравиться.