我使用相同的pendingIntent来设置多个警报,每个警报使用不同的intentId。闹钟响了。现在我想取消一个特定的闹钟。如果我使用cancel()方法,我最终会取消所有的警报。我只想删除一个特定的。此外,用户应该能够取消此警报,即使在第二次或第三次启动期间也是如此。因为当我第二次启动它时,我将不会有相同的pendingIntent对象。我必须持久化pendingIntent对象吗?如果是这样的话,是怎么做的?如何从多个告警中取消单个告警?
发布于 2012-01-16 17:23:48
你可以这样做,
在您的待定意图中,您可以传递一个代替requestCode的unique ID
PendingIntent pi = PendingIntent.getBroadcast(context, unique_id, i, 0);要取消,您可以使用相同的唯一ID来取消它,使用相同的待定意图。
am.cancel(pi);要获取更多信息,您可以使用StackOverflow或谷歌,目前我认为this answer将为您所用。:)
发布于 2012-01-16 17:10:34
这是一种通过解释来做到这一点的技巧。
首先,您应该为挂起的意图创建一个唯一的意图。为此,您可以为您的应用程序创建一个自定义的意图数据字段。我通过以下方式完成此操作:
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 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);https://stackoverflow.com/questions/8877365
复制相似问题