Приложение не работает в режиме ожидания

Рейтинг: 0Ответов: 2Опубликовано: 13.09.2014

Создал геолокационное приложение. Во время режима ожидания (когда экран выключен) оно перестает работать, а должно постоянно посылать запросы на сервер. Как мне сделать так, чтобы во время режима ожидания приложение продолжало работать?

Обновление

Добавлю: при пробуждении телефона все становится на свои места. То есть в режиме ожидания приложение как бы переходит в режим паузы.

Ответы

▲ 1

Например, так:

  1. Разрешить приложению будить телефон (android.permission.WAKE_LOCK в манифест).
  2. Использовать AlarmManager для установки периодического PendingIntent и WakefulBroadcastReceiver для обработки (обновление координат и отправка данных).
  3. Всё, в общем-то.
▲ 1

Для того, чтобы телефон получал координаты с выключенным экраном:

  • нужен сервис, тогда координаты будут получаться, даже если активно другое приложение; еще лучше foreground service, чтоб оно было неубиваемое, в случае когда os не хватает ресурсов, как бонус у юззера, всегда будет понимание, почему батарейка так быстро садится :)
  • в сервисе запустить locationManager.addProximityAlert с какими-нибудь левыми координатами (например 0,0), ну или если вы пользуетесь этим методом, то с вашими координатами. В этом случае телефон сам просыпается (без включения экрана) для опроса координат, правда, батарею жрет немерено (тестировал: 100% зарядка на sgs-III при опросе координат раз в минуту съедает зарядку за 7 часов).

Чтобы приложение могло отсылать на сервер координаты, да, нужен WAKE_LOCK, достаточно PARTIAL_WAKE_LOCK. Для периодической отправки можно воспользоваться Handler'ом с postDelayed или ScheduledThreadPoolExecutor с scheduleAtFixedRate и проч. Использовать AlarmManager - из пушки по воробьям, на SO присутствует мнение, мол, оставьте AlarmManager для будильников и прочих напоминалок, т.е. для юзера.