这是我用来为我的小部件设置警报的代码:
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/