其他分享
首页 > 其他分享> > Android 记录一个使用AlarmManager的坑。

Android 记录一个使用AlarmManager的坑。

作者:互联网

正常使用的代码是这样的:

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 来发送广播。

解决方法

在于这一行代码

PendingIntent pi = PendingIntent.getBroadcast(this, 0, intent, 0);

这里的 PendingIntent.getBroadcast() 第二个参数,必须不同。定时器才会设置两个不同 PendingIntent

标签:set,记录,AlarmManager,intent,设置,Android,Calendar,PendingIntent
来源: https://blog.csdn.net/weixin_42619856/article/details/104671892