Android 在AlarmManager中取消报警

Android 在AlarmManager中取消报警,android,alarmmanager,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 timeForNextStar

在我的代码中,我创建了一个报警,如下所示:

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(意图)定义), 将被取消


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

您应该使用PendingEvent flag==>PendingEvent.flag\u cancel\u当前第四个参数创建PendingEvent实例方法

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

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());
    }
我的问题是,这是否是取消所有报警的正确方法 同样的意图

我不知道您是否意识到以下语法的每个
pendingent
requestCode
应该是唯一的

public static PendingIntent getService (Context context, int requestCode, Intent intent, int flags)
我不确定什么定义了“匹配意图”

每个挂起的意图映射及其提供的触发意图,每个请求代码映射具有该意图

我们可以说,对于两个不同的
pendingent
来说,它可以是相同的
requestcode
,理想情况下,它们具有两个不同的
意图

请记住,如果
pendingent
对相同的
意图具有相同的
requestCode
,则可以根据
int标志将其覆盖或取消

如果我用上述代码创建多个报警,然后形成 取消如图所示,它会取消我创建的所有报警吗

要创建多个报警,您必须以相同的
意图发出不同的
requestCode
。 如果要取消创建的报警,则必须根据
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);

}
要创建:
AlarmManager AlarmManager=(AlarmManager)context.getSystemService(context.ALARM\u服务);
对于(int i=0;i