应用程序更新后重复的意图。警报是否存在?
Duplicate intents after application update. Does alarms survive?
我有一个错误,我在更新后得到了重复的意图。我所做的更改是开始监听 MY_PACKAGE_REPLACED,并重新注册下面的警报,因为我假设警报在应用程序更新时被杀死。但是,我确实得到了下面代码中定义的 "TriggerPulse" 广播的副本。
下面的代码是设置闹钟的唯一代码。然而,它是从多个地方调用的,但据我从文档中收集到的信息,这段代码 应该 是幂等的(IntentRequestCodes.PULSE_SERVICE 是一个设置为 1 的静态整数) .我认为这段代码是幂等的对吗?
final Context applicationContext = context.getApplicationContext();
Intent intent = new Intent("TriggerPulse");
final int flags = 0;
PendingIntent pendingIntent =
PendingIntent.getBroadcast(applicationContext, IntentRequestCodes.PULSE_SERVICE, intent, flags);
AlarmManager alarmMgr = (AlarmManager)applicationContext.getSystemService(Context.ALARM_SERVICE);
final int triggerAtMilliseconds = 0; // run first time immediately
alarmMgr.setInexactRepeating(
AlarmManager.ELAPSED_REALTIME_WAKEUP,
triggerAtMilliseconds,
AlarmManager.INTERVAL_HALF_HOUR,
pendingIntent
如果它在正常情况下是幂等的,这是否意味着更新的应用程序正在创建的 pendingIntent 根本不被认为与旧的遗留应用程序的 pendingIntent 匹配创建,导致警报重新安排?如果是这样,我可以很容易地解决问题,而无需在 MY_PACKAGE_REPLACED 上重新创建警报。但是,那里的多个资源表明需要在该事件中重新注册这些,这导致人们相信 Android 在某个时候可能就是这种情况。如果是这样,是否有更改此行为的截止 Android 版本?
尝试取消之前的闹钟再添加,这样即使之前添加了也不会有问题。
PendingIntent alarmIntent = PendingIntent.getBroadcast(CONTEXT, MY_ID, MY_INTENT, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager alarmMgr = (AlarmManager) CONTEXT.getSystemService(Context.ALARM_SERVICE);
alarmMgr.cancel(alarmIntent);
我有一个错误,我在更新后得到了重复的意图。我所做的更改是开始监听 MY_PACKAGE_REPLACED,并重新注册下面的警报,因为我假设警报在应用程序更新时被杀死。但是,我确实得到了下面代码中定义的 "TriggerPulse" 广播的副本。
下面的代码是设置闹钟的唯一代码。然而,它是从多个地方调用的,但据我从文档中收集到的信息,这段代码 应该 是幂等的(IntentRequestCodes.PULSE_SERVICE 是一个设置为 1 的静态整数) .我认为这段代码是幂等的对吗?
final Context applicationContext = context.getApplicationContext();
Intent intent = new Intent("TriggerPulse");
final int flags = 0;
PendingIntent pendingIntent =
PendingIntent.getBroadcast(applicationContext, IntentRequestCodes.PULSE_SERVICE, intent, flags);
AlarmManager alarmMgr = (AlarmManager)applicationContext.getSystemService(Context.ALARM_SERVICE);
final int triggerAtMilliseconds = 0; // run first time immediately
alarmMgr.setInexactRepeating(
AlarmManager.ELAPSED_REALTIME_WAKEUP,
triggerAtMilliseconds,
AlarmManager.INTERVAL_HALF_HOUR,
pendingIntent
如果它在正常情况下是幂等的,这是否意味着更新的应用程序正在创建的 pendingIntent 根本不被认为与旧的遗留应用程序的 pendingIntent 匹配创建,导致警报重新安排?如果是这样,我可以很容易地解决问题,而无需在 MY_PACKAGE_REPLACED 上重新创建警报。但是,那里的多个资源表明需要在该事件中重新注册这些,这导致人们相信 Android 在某个时候可能就是这种情况。如果是这样,是否有更改此行为的截止 Android 版本?
尝试取消之前的闹钟再添加,这样即使之前添加了也不会有问题。
PendingIntent alarmIntent = PendingIntent.getBroadcast(CONTEXT, MY_ID, MY_INTENT, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager alarmMgr = (AlarmManager) CONTEXT.getSystemService(Context.ALARM_SERVICE);
alarmMgr.cancel(alarmIntent);