【问题标题】:Cancelling a single alarm when you have multiple alarms当您有多个警报时取消单个警报
【发布时间】:2012-01-16 08:33:48
【问题描述】:

我使用相同的 pendingIntent 来设置多个警报,每个警报使用不同的 intentId。警报器正在工作。现在我想取消一个特定的警报。如果我使用 cancel() 方法,我最终会取消所有警报。我只想删除一个特定的。即使在第二次或第三次启动期间,用户也应该能够取消此警报。就像我第二次启动它时一样,我不会拥有相同的 pendingIntent 对象。我必须坚持pendingIntent 对象吗?如果是这样,怎么做?以及如何从多个警报中取消单个警报?

【问题讨论】:

  • 我不知道有一种方法可以从具有相同待处理意图的一组警报中取消单个警报。但是您可以使用某种持久性方法(共享首选项、文件、sqlite...)将特定警报时间标记为已取消,并在通过警报意图调用的代码中评估保存的信息以确定警报是否已被取消。取消。或者您可以取消所有警报,然后设置除一个之外的所有警报(如果您仍然知道所有时间)。顺便说一句,你不需要原来的待定意图,你可以创建一个新的。

标签: android android-alarms alarms


【解决方案1】:

你可以这样做,

在您的待处理 Intent 中,您可以传递 unique ID 来代替 requestCode

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

要取消,您可以使用相同的唯一 ID 来取消它,使用相同的 Pending Intent。

am.cancel(pi);

要获取更多信息,您可以使用 StackOverflow 或 Google,目前我认为 this answer 会为您提供帮助。 :)

【讨论】:

  • 如果您将 unique_id 设置为以毫秒为单位的闹钟时间,则可以保证它是唯一的。因此,您可以轻松取消它。我验证了这个工作。日历方法是 calendar.getTimeInMillis()
  • 你能帮我解决这个问题吗stackoverflow.com/questions/51542099/…@LalitPoptani
【解决方案2】:

这里有一种 hack 的解释。

首先,您应该为待处理的意图创建一个唯一的意图。为此,您可以为您的应用程序创建意图的自定义数据字段。我通过以下方式做到这一点:

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 将是您唯一的意图标识符。

然后像往常一样创建alarmManager 通知。要取消警报,您应该执行以下步骤。首先,您应该像前面的代码示例一样创建一个意图。然后基于此意图创建待处理意图(您还为警报创建相同的待处理意图)。然后你取消这个警报:

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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多