【问题标题】:Cancel all pendingIntent which using alarm service in android取消所有在android中使用报警服务的pendingIntent
【发布时间】:2015-09-14 17:26:59
【问题描述】:

我是 android 新手。我已经像这样使用 PendingIntent 设置通知

        Intent myIntent = new Intent(MainActivity.this, MyReceiver.class);
        myIntent.putExtra("Msg", "Title");
        myIntent.putExtra("Msgdetail", "Description of notification");
        myIntent.putExtra("username","name");

       //for uniquely broadcast request

       Random random = new Random();
       int m = random.nextInt(9999 - 1000) + 1000;
       PendingIntent pendingIntent = PendingIntent.getBroadcast(MainActivity.this, m, myIntent, 0);

      AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);
      alarmManager.set(AlarmManager.RTC, c.getTimeInMillis(),pendingIntent);

现在我想取消我使用上面的代码设置的所有通知(PendingIntent)。我在谷歌上搜索过,我知道我必须再次创建相同的意图,但是这两件事缺少 ID 号和时间。虽然我已经厌倦了这个但不幸的是没有工作。

private void removenotifications() {
    Intent myIntent = new Intent(MainActivity.this, MyReceiver.class);
    PendingIntent pendingIntent = PendingIntent.getBroadcast(MainActivity.this,PendingIntent.FLAG_ONE_SHOT, myIntent, Intent.FILL_IN_DATA);
    AlarmManager alarmManager = (AlarmManager) MainActivity.this.getSystemService(Context.ALARM_SERVICE);
    alarmManager.cancel(pendingIntent);
}

任何建议表示赞赏。谢谢。

【问题讨论】:

  • 这些是警报,而不是通知。通知是状态栏中显示的内容,必须使用 Notification.Builder 最好地创建。搜索警报而不是通知。
  • 我已经在 NotificationService.java 中完成了所有这些操作

标签: android notifications alarmmanager android-pendingintent


【解决方案1】:

要取消一个 Intent,您必须向 alarmManager.cancel() 传递一个 等于 与您传递给 alarmManager.set() 的 Intent 的 Intent。意图必须与为Intent.filterEquals() 指定的规则相同:

根据意图的目的确定两个意图是否相同 分辨率(过滤)。也就是说,如果他们的动作、数据、类型、类、 和类别是一样的。这不会比较任何额外的数据 包含在意图中。

因此,就您而言,问题在于您在设置警报时使用的随机值。您必须以某种方式存储这些随机值,并使用它们来创建相同的取消意图。

【讨论】:

  • 那我怎么能衡量这个通知已经被通知了,这不是???
  • 您是指警报还是通知?同样,这是两个不同的东西。关于发生的警报,您知道何时调用您的 Intent。无论如何,您必须自己创建通知。
  • 根据您的回答,我必须存储该随机编号。但是在取消时,alarm.set() 中的 c.getTimeInMillis() 以及如何存储这两个东西呢?谢谢你的时间@Ridcully
  • 我想,c 你已经存储在某个地方的东西。如果那个“东西”有一个唯一的 id,使用它,而不是你的随机值。否则,将随机值与c 的其余部分一起存储或例如在首选项或其他内容中。
  • 至于毫秒,取消警报不需要它们,只需要Intent。想一想 - 设置警报时,您说:“在 12:00 执行 Intent XY”,取消它时,您只需说“取消 Intent XY”。这里不需要时间,因为 Intent XY 本身必须是唯一的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多