即使在打盹模式下也每 15 秒获取一次位置

Posted

技术标签:

【中文标题】即使在打盹模式下也每 15 秒获取一次位置【英文标题】:Get location every 15 seonds even in doze mode 【发布时间】:2018-10-22 16:36:31 【问题描述】:

我想每 15 秒获取一次位置,一切正常,但在打瞌睡模式(深度睡眠)下,我的处理程序无法正常工作,是吗? AlarmManager 是个好方法,但时间限制为 1 分钟,在打盹模式下不重复。

@ReactMethod
public static void setAlarm()

  int interval = 50; // delay in secs
  AlarmManager am = (AlarmManager) reactContext.getSystemService(Context.ALARM_SERVICE);
  Intent intent = new Intent(reactContext, AlarmManagerReceiver.class);
  PendingIntent pi = PendingIntent.getBroadcast(reactContext, 0, intent, 0);
  am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), interval*1000 , pi);


接收者:

public class AlarmManagerReceiver extends BroadcastReceiver 

      @Override
      public void onReceive(Context context, Intent intent) 

          DoRoutine();

      


【问题讨论】:

您需要向我们展示您尝试过的内容,或者我们应该猜到您是如何编码的? @Dragonthoughts 我添加了一些代码以获取更多信息 【参考方案1】:

我想每 15 秒获取一次位置,一切正常

不是真的。

首先,不能保证您完全可以得到定位。例如,GPS 信号在室内或地下并不总是可用。

其次,不能保证您每 15 秒就会获得一次新的位置修复。例如,设备可能没有移动。

第三,on android 8.0+,除非您的应用在前台,否则您不会经常获得位置修复。

但是在打盹模式(深度睡眠)下,我的处理程序无法正常工作,是吗?

第 1 步:希望用户将您的应用添加到电池优化白名单中

第 2 步:使用前台服务

第 3 步:请求每 15 秒向您发送一次位置更新(例如,requestLocationUpdates() on LocationManager

第 4 步:使用部分 WakeLock 保持设备开机(即使屏幕关闭)

第 5 步:希望用户不要因为如此严重地耗尽电池而杀死你

【讨论】:

以上是关于即使在打盹模式下也每 15 秒获取一次位置的主要内容,如果未能解决你的问题,请参考以下文章

在不将应用列入白名单的情况下避免打盹模式

Android O 在打盹模式下前台服务未接收位置更新

打盹模式停止了定位服务

打盹模式对我的应用至关重要

在打盹模式下在前台服务中重复任务

是否可以在打盹模式或应用待机期间运行 Android 定期和一次性工作人员?