Обновление местоположения по времени с помощью AlarmManager

В настоящее время я использую FusedLocationProviderClient для запроса обновлений местоположения в методе MainActivity в onCreate. После создания активности BroadcastReceiver регистрируется как прослушиватель обновлений местоположения. Но обновления местоположения по-прежнему продолжаются ночью, так как я не удаляю обновления местоположения из приемника, но мне не нужны обновления ночью, так как они обычно дома. Я хочу удалить обновления из приемника в 22:00 и возобновить получение обновлений местоположения в 6:00 каждый день. Я думал, что AlarmManager будет достаточно, но я не мог найти правильный способ справиться с этой проблемой. Я мог бы просто игнорировать обновления, поступающие ночью в приемник, но я не думаю, что это было бы эффективным решением для батареи.

Сводка

  1. Запрашивать обновления местоположения, когда пользователь открывает приложение в первый раз, и обрабатывать обновления в фоновом режиме с помощью BroadcastReceiver (requestLocationUpdates(...))
  2. Удаляйте обновления местоположения из BroadcastReceiver каждый день в 22:00, поскольку приложение не нуждается в обновлениях местоположения ночью (removeLocationUpdates(...))
  3. Запрашивать обновления местоположения в 6:00 каждый день, поскольку приложению требуются обновления местоположения в течение дня в фоновом режиме с помощью BroadcastReceiver.

person Muhammed Kadir    schedule 16.03.2018    source источник


Ответы (1)


  1. Не думайте, что в 22:00 активность минимальна. Вместо этого вы можете использовать триггеры, такие как API распознавания действий. и JobDispatcher, чтобы узнать, когда движения нет и когда они начинаются. опять таки. Может стоит посмотреть.

  2. Взгляните на JobDispatcherAPI. AlarmManager может по-прежнему работать, хотя JobDispatcher в системе Android предпочтительнее AlarmManager и не иметь некоторые приятные функции, такие как указание выполнять действия только при наличии подключения к Интернету. Если вы нацелены на Android SDK ниже 5.0 (API 21) (что, вероятно, и есть), используйте Firebase JobDispatcher. Это позволит вам получать обновления одновременно, обрабатывать разницу во времени в разных странах и иметь возможность указывать такие вещи, как ожидание подключения к Интернету и т. д. Это очень мощно!

person Tim Kist    schedule 16.03.2018
comment
Спасибо за ответ, но поскольку у меня нет конкретных мест, геозона не подходит для моего проекта. И в документации не говорится об обесценивании AlarmManager, это неправильно, JobDispatcher является только современной альтернативой, а AlarmManager имеет исправления для API 19 и выше, согласно документации. - person Muhammed Kadir; 16.03.2018
comment
Вы правы, геозона не поможет. Я не уверен, как вы можете проверить, когда устройство находится в режиме ожидания. Это одно из ограничений в JobDispatcher. Возможно, вы могли бы использовать API-интерфейс распознавания действий, см. developers.google. .com/android/reference/com/google/android/gms/ &developers.google.com/android/reference/com/google/android/gms/ - person Tim Kist; 16.03.2018