android - 应用程序更新后重复的 Intent 。警报是否存在?

标签 android android-intent android-pendingintent android-broadcast android-alarms

我有一个错误,我在更新后得到了重复的 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/

相关文章:

android - 当应用程序关闭时,AlarmManager 不起作用。这是为什么?

android - PendingIntent 未启动应用程序

android - "The following SDK components were not installed: sys-img-x86-addon-google_apis-google-22 and addon-google_apis-google-22"

android - 如何在android中获取图像中像素的rgb值

android - 当警报响起时,如果应用处于 Activity 状态则开始 Activity ,如果应用未处于 Activity 状态则发送通知

android - "com.google.zxing.client.android.SCAN"在 android 中如何工作?

java - 数据库更改通知应用程序

java - 我的 Android 应用程序崩溃了,不理解 Eclipse 中的 Logcat

Android 将文件附加到 GMAIL - 无法附加空文件

android - AlarmManager 未在 Android 上启动