我的应用会同时设置多个闹钟。不幸的是,每个警报都使用相同的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名称是可行的方法,但我不知道如何为用户创建的每个新警报执行此操作。关于如何做到这一点的想法?谢谢!
答案 0 :(得分:4)
看到我之前遇到的同样问题...... 因此,解决方案是将唯一的未决意图传递给警报服务..所以我在这里可以做到这一点
PendingIntent pIntent = PendingIntent.getBroadcast(context,(int)alarm_id ,intent,PendingIntent.FLAG_CANCEL_CURRENT);
此处处于待定意图中,我已将唯一请求ID传递给待处理的意图。在取消闹钟时你必须记住这一点。
所以在我的情况下,我做了什么来生成唯一的id是把它放在数据库中我检索了表行的id并传递给挂起的Intent。
因此,如果要取消特定警报,则必须使用相同的表条目记住待处理意图的相同请求ID ...
我相信它会起作用..
答案 1 :(得分:2)
注册每个警报时使用不同的requestCode
。这是PendingIntent.getActivity/Service()
的第二个参数。
答案 2 :(得分:1)
在Android文档中,cancel()将取消具有相同pendingIntent的所有警报。所以唯一的出路是创建不同的pendingIntents。或者你可以使用调度重复警报,这样你就可以使用相同的pendingIntents。