设置和删除警报,同时避免新的意图

uwopmtnx  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(320)

我正在设置闹钟

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); .
在当前的实现中,只设置第一个警报,没有其他警报。
如何取消用上述代码创建的警报?有意图的数组?

bis0qfac

bis0qfac1#

当你用 AlarmManager ,它将自动取消任何其他已设置了匹配的报警 PendingIntent . 这意味着,如果要设置多个警报,必须确保每个警报 PendingIntent 是独一无二的。
以确保 PendingIntent 是唯一的,则需要确保至少以下一项是唯一的:
这个 requestCode 呼叫时使用 PendingIntent.getBroadcast() 中的动作 Intent 数据库中的数据 Intent 请注意,在确定是否2时不考虑“额外费用” PendingIntent s“匹配”。
还有,你的 requestCode 通过铸造 long 价值观 int . 这很糟糕,因为 long 值不适合于 int 你会失去一些价值。这不能保证你的 requestCode 它们是独一无二的。你应该改变你的想法 long 值转换为另一个实际适合 int 以确保 requestCode s。

相关问题