在我的代码中,我按如下方式创建了一个警报:
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)定义), 将被取消。
我不确定是什么定义了“匹配意图”。如果我使用上面的代码创建多个警报,然后如图所示执行取消,是否会取消我创建的所有警报?
答案 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}}