当您有多个警报时,取消单个警报

我已经使用相同的pendingIntent设置不同的intentId为每个警报。 闹钟正在工作。 现在我想取消一个特定的警报。 如果我使用cancel()方法,我最终会取消所有的警报。 我只想要一个特定的一个被删除。 即使在第二次或第三次发射时,用户也应该能够取消该警报。 正如在我第二次启动时,我不会有相同的pendingIntent对象。 我将不得不坚持的pendingIntent对象? 如果是这样,怎么样? 如何从多个报警中取消单个报警?

  • 识别并取消发送给AlarmManager的警报
  • 如何在重新启动后创建持久警报
  • 以编程方式在Android中打开屏幕
  • 我如何设置确切的,在Android 4.4中重复报警?
  • 警报管理器 - 计划多个非重复事件
  • 棒棒糖API控制状态栏中的警报图标
  • 检测默认的闹钟应用程序警报
  • Android设置多个警报
  • 你可以这样做,

    在您的Pending Intent中,您可以传递一个unique ID来代替requestCode

     PendingIntent pi = PendingIntent.getBroadcast(context, unique_id, i, 0); 

    并取消您可以使用相同的唯一ID来取消它,使用相同的挂起的意图。

     am.cancel(pi); 

    为了获得更多的信息,你可以使用StackOverflow或Google,现在我想this answer会为你做。 🙂

    这是一个解释这样做的黑客。

    首先,你应该为待定意图创build一个独特的意图。 为此,您可以为您的应用程序创build一个自定义数据字段。 我以下面的方式做到这一点:

     Intent intent = new Intent(); intent.setAction(ExampleAppWidgetProvider.MY_INTENT_ACTION); Uri data = Uri.withAppendedPath( Uri.parse("myapp://myapp/Id/#"), String.valueOf(intentId)); intent.setData(data); 

    在你的情况下intentId将是你的意图的唯一标识符。

    然后像往常一样创buildalarmManager通知。 要取消警报,您应该执行以下步骤。 起初,你应该像前面的代码示例一样创build一个intent。 然后,您根据此意图创build挂起的意图(您也创build相同的挂起的意图报警)。 然后你取消这个闹钟:

     Intent intent = new Intent(); intent.setAction(ExampleAppWidgetProvider.MY_INTENT_ACTION); Uri data = Uri.withAppendedPath( Uri.parse("myapp://myapp/Id/#"), String.valueOf(intentId)); intent.setData(data); PendingIntent pendingIntent = PendingIntent.getBroadcast( context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); alarmManager.cancel(pendingIntent);