使用待定意图取消来自广播接收器的警报管理器

时间:2014-10-07 19:20:31

标签: android broadcastreceiver android-pendingintent

我创建了一个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来取消它呢?

由于

1 个答案:

答案 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);