0

我目前正在使用in方法FusedLocationProviderClient请求位置更新。创建活动后,注册为位置更新侦听器。但是位置更新仍然在晚上继续,因为我没有从接收器中删除位置更新,但我不需要在晚上更新,因为它们通常在家里。我想在晚上 10 点从接收器中删除更新,并在每天早上 6 点重新开始接收位置更新。我认为这就足够了,但我找不到处理这个问题的正确方法。我可以忽略接收器晚上的更新,但我认为这不是一个省电的解决方案。MainActivityonCreateBroadcastReceiverAlarmManager

概括

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

1 回答 1

0
  1. 不要假设晚上 10 点是活动最少的时间。相反,您可以使用诸如Activity Recognition API之类的触发器JobDispatcher来获取何时没有运动以及何时再次开始运动。可能值得一看。

  2. 看看JobDispatcherAPIAlarmManager可能仍然有效,但JobDispatcher在 Android 系统上更受青睐,AlarmManager并且确实有一些不错的功能,例如指定仅在有互联网连接时执行操作。如果您的目标是低于 5.0 (API 21)(您可能是)的 Android SDK,请使用FirebaseJobDispatcher。这将允许您一次获取更新,处理国际时差并能够指定诸如等待何时有互联网连接等内容。它非常强大!

于 2018-03-16T12:29:48.197 回答