我创建了一个BroadCastReceiver,它使用警报管理器来安排某些事件。
在BroadcastReceiver中,我使用以下代码进行安排。
Intent localIntent = new Intent("com.test.sample");
PendingIntent pi = PendingIntent.getBroadcast(context, 0,
localIntent, 0);
alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP,
SystemClock.elapsedRealtime() + (5 * 60 * 1000),
pi);
此处上下文来自接收方的onReceive方法。
我想在接收其他广播时取消此闹钟。
我知道可以通过alarmManager.cancel(pi);
但是,如果警告管理员是从任何其他活动设置的,那么如何取消PendingIntent来取消它呢?
由于
答案 0 :(得分:8)
您需要创建一个具有相同PendingIntent
的新id
,然后将其作为cancelAlarm()
方法中的参数传递,如下所示:
创建闹钟
int alarmId = 0; /* Dynamically assign alarm ids for multiple alarms */
Intent intent = new Intent(context, AlarmReceiver.class); /* your Intent localIntent = new Intent("com.test.sample");*/
intent.putExtra("alarmId", alarmId); /* So we can catch the id on BroadcastReceiver */
PendingIntent alarmIntent;
alarmIntent = PendingIntent.getBroadcast(context,
alarmId, intent,
PendingIntent.FLAG_CANCEL_CURRENT);
取消闹钟(使用BroadcastReceiver
whitin onReceive(Context context, Intent intent)
方法)
int alarmId = intent.getExtras().getInt("alarmId");
PendingIntent alarmIntent;
alarmIntent = PendingIntent.getBroadcast(this, alarmId,
new Intent(this, AlarmReceiver.class),
PendingIntent.FLAG_CANCEL_CURRENT);
cancelAlarm(alarmIntent);