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

Ash*_*i K 0 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);
Run Code Online (Sandbox Code Playgroud)

这里的上下文来自接收器的onReceive方法.

我希望在接收其他广播时取消此警报.我知道警报可以取消 alarmManager.cancel(pi);

但是,如果警报管理员是从任何其他活动设置的,那么如何取消PendingIntent来取消它呢?

谢谢

Car*_*uez 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);
Run Code Online (Sandbox Code Playgroud)

取消闹钟(用BroadcastReceiverwhitin 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);
Run Code Online (Sandbox Code Playgroud)