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