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

Java 设置和删除警报,同时避免新的意图,java,android,android-intent,android-pendingintent,Java,Android,Android Intent,Android Pendingintent,我正在设置闹钟 Bundle Resids = new Bundle(); Resids.putInt("ResID",ResID); Resids.putLong("Time",Time); intent.putExtras(Resids); PendingIntent pendingIntent = PendingIntent.getBroadcast(context, (int)Time, intent, Pe

我正在设置闹钟

    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=newintent(context,BRClass.class)之前<代码>捆绑剩余=新捆绑()但是,因为每次都有一个新的报警意图,所以我不能使用
alarmMgr.cancel(PendingEvent)因为我不知道在
pendingent pendingent=pendingent.getBroadcast(context,(int)Time,intent,pendingent.FLAG_ONE_SHOT)中使用哪个
intent

在当前实现中,只设置第一个报警,而不设置其他报警


如何取消使用上述代码创建的报警?具有意图的数组?

当您使用
AlarmManager
设置报警时,它将自动取消使用匹配的
PendingEvent设置的任何其他报警。这意味着,如果要设置多个报警,必须确保每个
pendingent
是唯一的

要确保
pendingent
是唯一的,您需要确保以下至少一项是唯一的:

  • 调用
    pendingent.getBroadcast()时使用的
    requestCode
  • 意图中的操作
  • Intent中的数据
请注意,在确定2
pendingent
s“匹配”时,不考虑“附加”


另外,您的
requestCode
是通过将
long
值转换为
int
来创建的。这是不好的,因为
long
值不适合
int
并且会丢失一些值位。这不能保证您的
requestCode
s是唯一的。您应该将
long
值转换为另一个实际适合
int
的值,以确保
requestCode
的唯一性。

当您使用
AlarmManager
设置报警时,它将自动取消任何其他设置了匹配
挂起内容的报警。这意味着,如果要设置多个报警,必须确保每个
pendingent
是唯一的

要确保
pendingent
是唯一的,您需要确保以下至少一项是唯一的:

  • 调用
    pendingent.getBroadcast()时使用的
    requestCode
  • 意图中的操作
  • Intent中的数据
请注意,在确定2
pendingent
s“匹配”时,不考虑“附加”


另外,您的
requestCode
是通过将
long
值转换为
int
来创建的。这是不好的,因为
long
值不适合
int
并且会丢失一些值位。这不能保证您的
requestCode
s是唯一的。您应该将
long
值转换为另一个实际适合
int
的值,以确保
requestCode
的唯一性。

您必须将所有
(int)时间
保存在某个地方,然后使用新构造的
pendingent
(int)调用
取消
时间
。使用哪种意图?一个全局初始化并反复使用的对象,或者每次使用一个新对象?每个意图只是一组数据,您不需要存储意图实例。每当你需要与过去某个地方相同的意图时,就用相同的参数来构造它。在您的情况下,它将是
newintent(context,BRClass.class)
。唯一必须保存的是请求代码
(int)Time
。其他的可以在你需要的时候建造。啊,还有额外的。然后也保存所有时间。您必须将所有
(int)时间
保存到某个地方,然后使用新构造的
挂起内容
调用
取消
,每次
(int)时间
。使用哪种意图?一个全局初始化并反复使用的对象,或者每次使用一个新对象?每个意图只是一组数据,您不需要存储意图实例。每当你需要与过去某个地方相同的意图时,就用相同的参数来构造它。在您的情况下,它将是
newintent(context,BRClass.class)
。唯一必须保存的是请求代码
(int)Time
。其他的可以在你需要的时候建造。啊,还有额外的。然后把它们都保存起来。