Android 设备处于睡眠模式时,AlarmManager.setInexactRepeating是否可以广播意图?
我有一个非常简单的类,用于设置和取消AlarmManager以广播意图:Android 设备处于睡眠模式时,AlarmManager.setInexactRepeating是否可以广播意图?,android,broadcastreceiver,alarmmanager,sleep,Android,Broadcastreceiver,Alarmmanager,Sleep,我有一个非常简单的类,用于设置和取消AlarmManager以广播意图: public class MyIntentsAlarm { public void setAlarm(Context context){ AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); Intent i = new Intent("MY_ACTION"); PendingIntent pi =
public class MyIntentsAlarm {
public void setAlarm(Context context){
AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
Intent i = new Intent("MY_ACTION");
PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, 0);
am.setInexactRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(),5*60*1000L, pi);
}
public void cancelAlarm(Context context){
Intent intent = new Intent("MY_ACTION");
PendingIntent sender = PendingIntent.getBroadcast(context, 0, intent, 0);
AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
alarmManager.cancel(sender);
}
}
我调用活动的onCreate()
方法中的setAlarm(Context Context)
方法和onDestroy()中的cancelAlarm(Context Context)
。然后,在我的活动的onCreate()
方法中,我注册了一个BroadcastReceiver来监听此AlarmManager广播的意图,并执行一些任务(同时获取唤醒锁以确保任务得到执行):
即使我使用RTC_WAKEUP
类型并在广播接收器中获取了WakeLock
,手机处于睡眠模式时,AlarmManager是否可能不广播意图
到目前为止,我在多台设备上重现的经验是,在我的设备处于睡眠模式(我的应用程序在白天不断运行)的第一个晚上,将播放意图,但之后,它再也不会在夜间播放意图
有什么想法吗?试试这个
SystemClock.elapsedRealtime()
替换为
System.currentTimeMillis()
我一定会努力的,但是你能详细解释一下为什么这可能是问题的根源吗?请看,我不应该也将类型更改为AlarmManager.Appead_REALTIME_WAKEUP
而不是使用AlarmManager.RTC_WAKEUP
?Appead_REALTIME_WAKEUP:从启动时开始触发警报,RTC_WAKEUP:触发警报根据时钟时间。
System.currentTimeMillis()