AlarmManager无法在睡眠模式下工作

Rey*_*ohn 6 android alarmmanager android-alarms

我已经设置了一个重复时间的AlarmManagr.这是我设置它的方法:

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);                   
}
Run Code Online (Sandbox Code Playgroud)

这工作正常,除非我的设备进入睡眠模式时警报停止工作,直到我手动唤醒我的设备.唤醒设备后,AlarmManager再次开始工作.

如何让管理员即使在睡眠模式下也能运行?

小智 8

这是因为您PendingIntent正在调用服务而不是服务,BroadcastReceiver这意味着设备可以在您创建服务之前重新进入休眠状态.如果您转移到广播接收器,它"应该"保持清醒,直到onReceive完成BroadcastReceiver,这意味着您将有时间获取唤醒锁并开始服务.即使你移动到a,BroadcastReceiver你也会想要获得一个唤醒锁,直到你完成你的处理,如果它需要超过10秒(这是一个限制BroadcastReceiver).

这取自AlarmManager的android文档的第2段:

"...如果你的闹钟接收器被叫Context.startService(),那么手机可能会在所请求的服务启动之前就睡觉.为了防止这种情况,你的BroadcastReceiver和服务需要实施一个单独的唤醒锁定策略,以确保手机继续运行直到服务变得可用."