首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当您有多个告警时取消单个告警

当您有多个告警时取消单个告警
EN

Stack Overflow用户
提问于 2012-01-16 16:33:48
回答 2查看 5.5K关注 0票数 9

我使用相同的pendingIntent来设置多个警报,每个警报使用不同的intentId。闹钟响了。现在我想取消一个特定的闹钟。如果我使用cancel()方法,我最终会取消所有的警报。我只想删除一个特定的。此外,用户应该能够取消此警报,即使在第二次或第三次启动期间也是如此。因为当我第二次启动它时,我将不会有相同的pendingIntent对象。我必须持久化pendingIntent对象吗?如果是这样的话,是怎么做的?如何从多个告警中取消单个告警?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-01-16 17:23:48

你可以这样做,

在您的待定意图中,您可以传递一个代替requestCodeunique ID

代码语言:javascript
复制
PendingIntent pi = PendingIntent.getBroadcast(context, unique_id, i, 0);

要取消,您可以使用相同的唯一ID来取消它,使用相同的待定意图。

代码语言:javascript
复制
am.cancel(pi);

要获取更多信息,您可以使用StackOverflow或谷歌,目前我认为this answer将为您所用。:)

票数 11
EN

Stack Overflow用户

发布于 2012-01-16 17:10:34

这是一种通过解释来做到这一点的技巧。

首先,您应该为挂起的意图创建一个唯一的意图。为此,您可以为您的应用程序创建一个自定义的意图数据字段。我通过以下方式完成此操作:

代码语言:javascript
复制
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,如前面的代码示例所示。然后,您可以基于此意图创建待定意图(还可以为报警创建相同的待定意图)。然后你取消这个闹钟:

代码语言:javascript
复制
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);
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8877365

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档