我有以下代码,它只运行一个警报管理器:
public void runAlarm(){
Intent intent = new Intent(context, MyReceiver.class);
intent.setAction(ACTION_TIMEOUT);
PendingIntent alarmIntent = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);
setTimeOutAlarm(TIMEOUT_MINUTES,alarmIntent);
AlarmManager alarmMgr = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
alarmMgr.setExact(AlarmManager.RTC,
Calendar.getInstance().getTimeInMillis() + 3*60*1000, alarmIntent);
}
工作正常。我的问题是关于待处理的意图标记: PendingIntent.FLAG_CANCEL_CURRENT
如果我两次运行此方法,它是否真的取消了alarmManager中已有的其他待处理意图?怎么知道它不取消它?我只想确保使用这个标志不会造成任何泄漏。我的意图是我可以多次运行此代码,它将继续取消已经发送到alarmManager实例的先前pendingIntent。
但每当我运行此代码时,当我使用此adb命令检查时,警报计数会增加1:
adb shell dumpsys alarm | grep com.your.package
所以似乎alarmManager也没有被取消。
答案 0 :(得分:3)
我相信你不需要取消旧警报......但只需更新它。
我认为您可以使用:PendingIntent.FLAG_UPDATE_CURRENT
请进行一些测试,如果有效,请告诉我。