5

更新後に重複インテントが発生するバグがあります。私が行った変更は、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バージョンがありますか?

答えて

3

前のアラームをもう一度追加する前にキャンセルするようにしてください。前のアラームを追加しても、問題はありません。

PendingIntent alarmIntent = PendingIntent.getBroadcast(CONTEXT, MY_ID, MY_INTENT, PendingIntent.FLAG_UPDATE_CURRENT); 
    AlarmManager alarmMgr = (AlarmManager) CONTEXT.getSystemService(Context.ALARM_SERVICE); 
    alarmMgr.cancel(alarmIntent); 
関連する問題