这是我用来为我的小部件设置警报的代码:
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);
}
Run Code Online (Sandbox Code Playgroud)
但问题是即使在睡眠模式下,onReceive()仍然会被意图触发.
虽然使用后setInexactRepeating代替setRepeating,调用之间的延迟时间也会上升到在睡眠模式下1分,但是这仍然是电池消耗.
我一直在使用Android中的警报管理器看到一些奇怪的问题,尽管事实上我正在使用RTC(非唤醒)手机将以正确的重复间隔可靠地发送PendingIntents.
我的测试详情
现在根据我的理解,手机应该睡觉,除非我将其唤醒,并且在手机醒来之前不应发送我的警报.
我为Android设备写了一个小小部件.
该小部件用于AlarmManager设置定期更新.我正在使用RTC时钟AlarmManager.
根据文档,如果设备处于休眠状态,则RTC时钟不会唤醒设备,下次更新将在设备唤醒时进行.
我有一个小部件的日志文件,显示它何时更新.
即使我没有触摸设备,我仍然会在日志文件中看到更新.
这是为什么?设备不应该睡觉,因此我的小部件不应该更新?
我正在使用System.currentTimeMillis()它的开始时间所以它应该是正确的RTC时钟.