首页 > 解决方案 > 即使在打瞌睡模式下也每 15 秒获取一次位置

问题描述

我想每 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();

      }

}

标签: androidalarmmanagerhandlerandroid-doze

解决方案


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

并不真地。

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

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

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

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

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

第 2 步:使用前台服务

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

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

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


推荐阅读