正常使用的代码是这样的:
private void createAlarm(String message, int hour, int minutes){
AlarmManager alarmManager = (AlarmManager)
getSystemService(Service.ALARM_SERVICE);
//设置定时发送广播的PendingIntent
Intent intent = new Intent(this, ClockReceiver.class);
Bundle bundle = new Bundle();
bundle.putString("text",message);
intent.putExtras(bundle);
PendingIntent pi = PendingIntent.getBroadcast(this, 0, intent, 0);
//设置当前时间
Calendar c = Calendar.getInstance();
c.setTimeInMillis(System.currentTimeMillis());
// 根据用户选择的时间来设置Calendar对象
c.set(Calendar.HOUR_OF_DAY, hour);
c.set(Calendar.MINUTE, minutes);
c.set(Calendar.SECOND,0);
c.set(Calendar.MILLISECOND, 0);
// 设置AlarmManager在Calendar对应的时间发送广播
alarmManager.cancel(pi);
alarmManager.set(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(), pi);
}
这样使用是没毛病的。
但是问题在于,你 接连 定时两个广播发送的话。就是两个广播的发送时间间距较短。问题就出现。
尽管你给定时器设置了新的 PendingIntent ,然而它只会以你 第一次 设置的 PendingIntent 来发送广播。
- 拿我上面的代码做例子。
我两次传入不同的 message 来调用 createAlarm()。如果设置的两次定时的时间间隔较短。那么我的广播会两次收到第一个 message。
解决方法
在于这一行代码
PendingIntent pi = PendingIntent.getBroadcast(this, 0, intent, 0);
这里的 PendingIntent.getBroadcast() 第二个参数,必须不同。定时器才会设置两个不同 PendingIntent