2013-10-08 40 views
0

警报在我的代码,我创建一个报警如下:取消在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); 

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

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

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

回答

0

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

PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent,PendingIntent.FLAG_CANCEL_CURRENT); 
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()); 
    } 
0

我的问题是,这是否是要取消的 相同意图的全部报警,正确的方法是什么?

我不知道你是否意识到requestCode应以下语法

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

在每个pendingIntent唯一我不完全知道什么定义了一个“匹配的意图”。

每个挂起的意图映射与其提供的意图触发和每个请求代码映射与意图。

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

记住,在这里如果PendingIntent具有相同requestCode用于相同intent那么它可以是覆盖或取消根据int flags

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

要创建一个多重报警,你必须给出不同的requestCodeintent相同。 如果要取消那些创建报警,那么你必须根据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); 

}