我正在设置闹钟
Bundle Resids = new Bundle();
Resids.putInt("ResID",ResID);
Resids.putLong("Time",Time);
intent.putExtras(Resids);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, (int)Time, intent, PendingIntent.FLAG_ONE_SHOT);
alarmMgr.setExact(AlarmManager.ELAPSED_REALTIME_WAKEUP, Time, pendingIntent);
我过去常常把 intent = new Intent(context, BRClass.class);
之前 Bundle Resids = new Bundle();
但是,因为有一个新的意图,每次新的警报,我不能使用 alarmMgr.cancel(pendingIntent);
因为我不知道 intent
用于 PendingIntent pendingIntent = PendingIntent.getBroadcast(context, (int)Time, intent, PendingIntent.FLAG_ONE_SHOT);
.
在当前的实现中,只设置第一个警报,没有其他警报。
如何取消用上述代码创建的警报?有意图的数组?
1条答案
按热度按时间bis0qfac1#
当你用
AlarmManager
,它将自动取消任何其他已设置了匹配的报警PendingIntent
. 这意味着,如果要设置多个警报,必须确保每个警报PendingIntent
是独一无二的。以确保
PendingIntent
是唯一的,则需要确保至少以下一项是唯一的:这个
requestCode
呼叫时使用PendingIntent.getBroadcast()
中的动作Intent
数据库中的数据Intent
请注意,在确定是否2时不考虑“额外费用”PendingIntent
s“匹配”。还有,你的
requestCode
通过铸造long
价值观int
. 这很糟糕,因为long
值不适合于int
你会失去一些价值。这不能保证你的requestCode
它们是独一无二的。你应该改变你的想法long
值转换为另一个实际适合int
以确保requestCode
s。