【问题标题】:Cancel alarmmanager from broadcast receiver using Pending intent使用待定意图从广播接收器中取消警报管理器
【发布时间】:2014-10-07 19:20:30
【问题描述】:

我创建了一个 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);

这里的context来自接收方的onReceive方法。

我想在收到其他广播时取消此警报。 我知道alarmManager.cancel(pi);可以取消闹钟

但是,如果警报器是从任何其他活动中设置的,那么如何获取 PendingIntent 来取消它?

谢谢

【问题讨论】:

  • 只需创建一个新的 PendingIntent

标签: android broadcastreceiver android-pendingintent


【解决方案1】:

您需要使用相同的id 创建一个新的PendingIntent,然后将其作为参数传递给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);

取消报警(在BroadcastReceiverwhitin onReceive(Context context, Intent intent)method)

int alarmId = intent.getExtras().getInt("alarmId");
PendingIntent alarmIntent;
alarmIntent = PendingIntent.getBroadcast(this, alarmId, 
        new Intent(this, AlarmReceiver.class),
        PendingIntent.FLAG_CANCEL_CURRENT);
cancelAlarm(alarmIntent);

【讨论】:

  • 不强制指定FLAG_CANCEL_CURRENT,你可以传递0作为标志
  • 如果我没有身份证怎么办?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多