应用程序更新后重复意图。警报存在吗?

时间:2016-02-21 11:31:46

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

我有一个错误,我在更新后得到重复的意图。我所做的更改是开始收听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版本,这种行为发生了变化?

1 个答案:

答案 0 :(得分:4)

尝试在再次添加之前取消之前的闹钟,因此即使之前添加过闹钟也不会有任何问题。

    PendingIntent alarmIntent = PendingIntent.getBroadcast(CONTEXT,  MY_ID, MY_INTENT, PendingIntent.FLAG_UPDATE_CURRENT);
    AlarmManager alarmMgr = (AlarmManager) CONTEXT.getSystemService(Context.ALARM_SERVICE);
    alarmMgr.cancel(alarmIntent);