我已经设置了一个具有重复时间的警报管理器。以下是我的设置方法:
public void setAlarmManager(Context context, Intent intent) {
PendingIntent pendingIntent;
pendingIntent = PendingIntent.getService(context, 0, intent, 0);
AlarmManager alarmManager =
(AlarmManager)context.getSystemService(context.ALARM_SERVICE);
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.add(Calendar.SECOND, 10);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,
calendar.getTimeInMillis(),
40000, pendingIntent);
}
这可以正常工作,除非当我的设备进入睡眠模式,警报停止工作,直到我手动唤醒我的设备。唤醒设备后,AlarmManager重新开始工作。
如何让经理在睡眠模式下运行?
最佳答案
这是因为您的PendingIntent
调用的是服务,而不是BroadcastReceiver
,这意味着设备可以在创建服务之前恢复睡眠。如果您移动到广播接收器,它“应该”保持清醒,直到onreceive完成广播接收器,这意味着您将有时间获得wakelock并启动您的服务。即使您移动到BroadcastReceiver
中,如果需要超过10秒(这是BroadcastReceiver
的限制),您也需要获取wakelock,直到完成处理为止。
这摘自AlarmManager的Android文档第2段:
“……”如果您的报警接收器呼叫了Context.startService()
,则手机可能会在启动所请求的服务之前休眠。为了防止出现这种情况,您的广播接收器和服务需要实施单独的唤醒锁定策略,以确保手机继续运行,直到服务可用为止。”