android - 使用 AlarmManager.RTC 类型调度的 PendingIntent 在 sleep 模式下仍然被调用

标签 android alarmmanager android-pendingintent

这是我用来为我的小部件设置警报的代码:

 private static void setAlarm(Context context) {
    Intent myIntent = new Intent(context, Widget.class);
    myIntent.setAction(AUTO_UPDATE);
    PendingIntent pendingIntent =
            PendingIntent.getBroadcast(context, 0, myIntent, PendingIntent.FLAG_UPDATE_CURRENT);
    AlarmManager alarmManager = (AlarmManager) context.getSystemService(Service.ALARM_SERVICE);
    Calendar calendar = Calendar.getInstance();
    calendar.setTimeInMillis(System.currentTimeMillis());
    calendar.add(Calendar.SECOND, 8);
    alarmManager.setInexactRepeating(AlarmManager.RTC, calendar.getTimeInMillis(), 8000,
            pendingIntent);
}  

但问题是,即使在 sleep 模式下,onReceive() 仍然会被 intent 触发。

虽然在使用 setInexactRepeating 而不是 setRepeating 后,调用之间的延迟在 sleep 模式下增加了最多 1 分钟,但这仍然很耗电。

最佳答案

我相信您将闹钟设置为在日历时间后 8 秒触发,您已将日历时间设置为比当前时间提前 8 秒..所以您将闹钟设置为立即触发。

我看不出有任何理由需要此处的日历。这里的日历只是用来记录 future 8秒的时间:

Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.add(Calendar.SECOND, 8);

此处创建的警报每 8 秒触发一次:

alarmManager.setInexactRepeating(AlarmManager.RTC, calendar.getTimeInMillis(), 8000,
        pendingIntent);

警报继续每八秒触发一次。

我会尝试改变:

alarmManager.setInexactRepeating(AlarmManager.RTC, calendar.getTimeInMillis(), 8000,
        pendingIntent);

收件人:

alarmManager.setInexactRepeating(AlarmManager.RTC, System.currentTimeMillis(), 8000,
        pendingIntent);

如果问题仍然存在,则可能是时间间隔问题。尝试将 setRepeating() 更改为 set() 以查看情况是否如此。

关于android - 使用 AlarmManager.RTC 类型调度的 PendingIntent 在 sleep 模式下仍然被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12495040/

相关文章:

android - Ionic 的音频播放器

java - 尝试使用 "getNextAlarmClock()"获取下一个闹钟时间,但没有得到正确的答案

android - 新 Activity 有时无法开始

Android session 在 IBM Websphere 服务器中丢失

java - Thread 或 Runnable 如何立即被杀死

设备休眠时 Android AlarmManager RTC 不会暂停

android - 使用自定义字体创建数字时钟小部件

android - 获取 'java.lang.IllegalArgumentException: Can' t 在运行 android 2.3.3 的设备中使用 FLAG_RECEIVER_BOOT_UPGRADE

android - 通知中的操作不执行任何操作

android - 如何防止 Android 在调用相机 Intent 后重新启动应用程序?