我有一个错误,我在更新后得到了重复的 Intent 。我所做的更改是开始监听 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);
关于android - 应用程序更新后重复的 Intent 。警报是否存在?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35535554/