android - AlarmManager 在 sleep 模式下不工作

标签 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);                   
}

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

如何在 sleep 模式下保持管理器运行?

最佳答案

这是因为您的 PendingIntent 正在调用服务而不是 BroadcastReceiver,这意味着设备甚至可以在您的服务创建之前重新进入休眠状态。如果您移动到广播接收器,它“应该”保持清醒,直到广播接收器的 onReceive 完成,这意味着您将有时间获得唤醒锁并启动您的服务。即使您移动到 ​​BroadcastReceiver,如果需要超过 10 秒(这是 BroadcastReceiver)。

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

"... 如果您的警报接收器调用了 Context.startService(),则手机可能会在请求的服务启动之前休眠。为了防止这种情况,您的 BroadcastReceiver 和 Service 将需要实现单独的唤醒锁定策略,以确保手机在服务可用之前继续运行。”

关于android - AlarmManager 在 sleep 模式下不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10206021/

相关文章:

java - 如何在测试期间在 Android 设备之间切换

android - 为什么闹钟不播放闹钟(声音)?

android - AlarmManager 与 Handler.postDelayed

flutter - 如何每隔15秒在后台运行一些Dart代码

java - 将数据从一个 Activity 发送到另一个 Activity

android - 如何在 android Activity 中绘制温度计?

android - ACTION_IMAGE_CAPTURE 和 CAMERA 功能

android - 每天 12 小时重复通知

android - 在android中每周重复一次警报

java - 如果时区不同于格林尼治标准时间(UTC),则AlarmManager在错误的时间触发警报