使用AlarmManager.RTCtypes计划的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); } 

但问题是,即使在睡眠模式下, onReceive()仍然被意图触发。

尽pipe在使用setInexactRepeating而不是setRepeating ,在睡眠模式下,呼叫之间的延迟增加到1分钟,但仍然是电池消耗。

Solutions Collecting From Web of "使用AlarmManager.RTCtypes计划的PendingIntent在睡眠模式下仍然被调用"

我相信你设置的闹钟在日历时间8秒后触发,你已经设置了8秒的时间,所以你设置的闹钟立即触发。

我没有看到任何理由你需要一个日历在这里。 日历仅用于跟踪未来8秒的时间:

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

警报每8秒触发一次:

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

警报每8秒钟继续触发一次。

我会尝试改变:

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

至:

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

如果你继续有问题,那么也许间隔是问题。 尝试将setRepeating()更改为set()以查看是否如此。