使用AlarmManager定时更新位置

时间:2018-03-16 08:44:54

标签: android alarmmanager locationmanager fusedlocationproviderclient

我目前正在使用FusedLocationProviderClientMainActivity方法onCreate中请求位置更新。创建活动后,BroadcastReceiver注册为位置更新侦听器。但位置更新仍然在晚上继续,因为我不从接收器删除位置更新,但我不需要在晚上更新,因为他们通常在家里。我希望在晚上10点从接收器中删除更新,并在每天早上6点重新开始接收位置更新。我认为AlarmManager就足够了,但我找不到合适的方法来处理这个问题。我可以忽略接收器中的夜间更新,但我认为这不是一个电池效率高的解决方案。

摘要

  1. 当用户第一次打开应用程序并使用BroadcastReceiver(requestLocationUpdates(...))在后台处理更新时请求位置更新
  2. 每天晚上10点从BroadcastReceiver删除位置更新,因为应用程序不需要在晚上更新位置(removeLocationUpdates(...)
  3. 请求位于每天早上6点的位置更新,因为应用程序需要在白天使用BroadcastReceiver进行位置更新

1 个答案:

答案 0 :(得分:0)

  1. 不要以为10PM是活动最少的时间。相反,您可以使用Activity Recognition APIJobDispatcher等触发器来获取没有移动时以及何时再次开始移动。可能值得一看。

  2. 看看JobDispatcher API。虽然JobDispatcherAlarmManager以上的Android系统上受到青睐,但AlarmManager可能仍有效,但确实有一些不错的功能,例如指定仅在有互联网连接时执行操作。如果您的Android SDK定位低于5.0(API 21)(您可能是),请使用Firebase JobDispatcher。 这样您就可以一次获得更新,处理国际时差,并能够指定等待互联网连接等事情。它非常强大!