1

我的应用程序将同时设置多个警报。不幸的是,每个警报都是使用相同的 PendingIntent 对象设置的。这是我用来设置闹钟的代码:

//Use AlarmManager to trigger the notification/alarm.
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);

//PendingIntent to launch activity when the alarm triggers.                    
Intent i = new Intent("com.testapp.DisplayNotification");

//Assign the reminder's primary key as the notification ID.
i.putExtra("Reminder_Name", editRemindMeTo.getText().toString());
i.putExtra("Reminder_Primary_Key", reminderPrimaryKey);

PendingIntent displayIntent = PendingIntent.getActivity(
getBaseContext(), 0, i, 0);               

//Set the alarm to trigger.
alarmManager.set(AlarmManager.RTC_WAKEUP, 
c.getTimeInMillis(), displayIntent);

我知道我可以使用以下代码删除警报:

AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 

Intent i = new Intent(context, MyPendingIntentService.class);
PendingIntent displayIntent = PendingIntent.getService(context, 0, i, 0);

alarmManager.cancel(displyIntent);

但是,使用此代码将删除我的所有警报(如果我在这里错了,请纠正我)。有没有办法只删除用户从数据库中删除的警报?在用户删除我的应用程序数据库中的警报条目后,应立即从我的应用程序中删除警报。我猜想使用不同的 PendingIntent 名称将是可行的方法,但我不知道如何为用户创建的每个新警报执行此操作。关于如何做到这一点的想法?谢谢!

4

3 回答 3

4

看到我以前在这里遇到的同样的问题......所以解决方案是将唯一的待处理意图传递给警报服务......所以我在这里是如何完成的

PendingIntent pIntent = PendingIntent.getBroadcast(context, (int) alarm_id , intent, PendingIntent.FLAG_CANCEL_CURRENT);

在未决意图中,我已将唯一请求 ID 传递给未决意图。取消闹钟时您必须记住这一点。因此,在我的情况下,我为生成唯一 ID 所做的工作是将其放入数据库中,我已检索表行的 ID 并传递给待处理的 Intent。
因此,如果您想取消特定警报,则必须使用相同的表条目记住待处理意图的相同请求 ID...

我相信它会工作..

于 2012-09-25T05:33:09.517 回答
2

requestCode注册每个警报时使用不同的。这是 的第二个参数PendingIntent.getActivity/Service()

于 2012-09-25T05:23:58.083 回答
1

在 Android 文档中,cancel() 将取消所有具有相同 pendingIntent 的警报。所以唯一的出路是创建不同的pendingIntents。或者您也可以求助于安排重复警报,这样您就可以使用相同的pendingIntents。

于 2012-09-25T05:26:16.363 回答