即使在打盹模式下,每15个地点获取一个位置

时间:2018-05-12 12:26:45

标签: android alarmmanager handler android-doze

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

      }

}

1 个答案:

答案 0 :(得分:1)

  

我希望每15秒获得一次位置,一切正常

不是。

首先,无法保证您可以获得位置修复。例如,GPS信号并不总是在室内或地下可用。

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

第三,on Android 8.0+,除非你的应用程序位于前台,否则你不会经常在任何地方获得位置修复。

  

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

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

步骤2:使用前台服务

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

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

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