取消AlarmManager中的警报

时间:2013-10-08 05:45:49

标签: android alarmmanager

在我的代码中,我按如下方式创建了一个警报:

AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
Intent i = new Intent("mypackage.START_MONITORING_SERVICE");
PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, 0);
long timeForNextStart = System.currentTimeMillis() + elapsedTime;
am.set(AlarmManager.RTC_WAKEUP, timeForNextStart, pi);

要取消闹钟,请执行以下操作:

AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent("mypackage.START_MONITORING_SERVICE");
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, 0);
am.cancel(pendingIntent);

我的问题是,这是否是取消同一意图的所有警报的正确方法。文档说:

  

删除具有匹配Intent的所有警报。任何类型的警报,   其Intent与此Intent匹配(由filterEquals(Intent)定义),   将被取消。

我不确定是什么定义了“匹配意图”。如果我使用上面的代码创建多个警报,然后如图所示执行取消,是否会取消我创建的所有警报?

3 个答案:

答案 0 :(得分:0)

你应该使用PendingIntent flag ==> PendingIntent.FLAG_CANCEL_CURRENT第四个参数创建pendingIntent实例方法。

PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent,PendingIntent.FLAG_CANCEL_CURRENT);

答案 1 :(得分:0)

试试这个

AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);

    Intent updateServiceIntent = new Intent(context, MyPendingIntentService.class);
    PendingIntent pendingUpdateIntent = PendingIntent.getService(context, 0, updateServiceIntent, 0);

    // Cancel alarms
    try {
        alarmManager.cancel(pendingUpdateIntent);
    } catch (Exception e) {
        Log.e(TAG, "AlarmManager update was not canceled. " + e.toString());
    }

答案 2 :(得分:0)

  

我的问题是这是否是取消所有警报的正确方法   同样的意图?

我不知道您是否知道requestCode对于每个pendingIntent应该是唯一的以下语法

public static PendingIntent getService (Context context, int requestCode, Intent intent, int flags)
  

我不确定是什么定义了“匹配意图”。

每个待处理的意图映射及其提供的意图触发,每个请求代码映射具有该意图。

我们可以说两个不同的requestcode pendingIntent可能相同intents,理想情况下有两个PendingIntent

请注意,如果requestCode对于相同的intent具有相同的int flags,则根据requestCode

可以覆盖或取消
  

如果我使用上面的代码创建多个警报,然后执行   取消如图所示,它会取消我创建的所有警报吗?

要创建多重警报,您必须使用相同的intent提供不同的requestCode。 如果您要取消这些已创建的闹钟,则必须根据To Create : AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); For (int i= 0 ; i <5 ; i++){ PendingIntent contentIntent = PendingIntent.getBroadcast(TaskReminder.this, i, new Intent(),PendingIntent.FLAG_UPDATE_CURRENT); alarmManager.set(AlarmManager.RTC_WAKEUP, timeForNextStart, contentIntent); } To cancel : For (int i= 0 ; i <5 ; i++){ //Note here ' i ' is the requestCode which map each pendingIntent with there provided intent PendingIntent contentIntent = PendingIntent.getBroadcast(TaskReminder.this, i, new Intent(),PendingIntent.FLAG_UPDATE_CURRENT); alarmManager.cancel(contentIntent); }

取消它们

例如

{{1}}