2017-08-02 4 views
0

Androidでアラームアプリケーションを開発しています。流れは本当にシンプルなので、PendingIntentを作成してから、メソッドをAlarmManagerとよく呼んでいます。両方のpendingIntentsを同じrequestCodeに保ちます

 Intent myIntent = new Intent(context, BroadcastReceiver.class); 
     pendingIntent = PendingIntent.getBroadcast(context, 0, myIntent, 0); 

     AlarmManager alarmManager = (AlarmManager) context.getSystemService(ALARM_SERVICE); 
     alarmManager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, 
     System.currentTimeMillis() + difference, pendingIntent); 

は、いくつかのテストの後、私はゼロにpendingIntentrequestCodeを設定するので、上記のコードで私は1つのアラームを設定することができることに気づいた、私はrequestCodeセットと別のアラームを設定した場合0にすると、前の値を上書きします。 requestCodeを変更せずにこれを修正する方法はありますか?私はおそらくフラグが私を助けることができると思っていたが、私は前のpendingIntentを上書きしないフラグを見つけられなかった。

明らかな解決策は、0を別のintに変更してから、すべてのintを追跡し、使用されていないintを追跡することです。私がプロジェクトをちょうど始めたのであれば、その解決策はうまくいくはずですが、私はすでに中間にあり、あらかじめ定義された要求コードとして列挙型を使用しています。このメカニックを変更して個々のintを追跡するのは非常に難しいので、同じrequestCodeの新しいものが登録されているときにpendingIntentを上書きしない方法があるかどうか尋ねています。前もって感謝します。

+0

差別化できる特定の種類のフラグが存在するかどうかを質問しています – Libathos

答えて

2

私は彼らに

を区別することができるようになりますフラグの特定のタイプが存在する場合はありません、これはすでにrequestCodeパラメータの目的であるので、それは理にかなって求めています。詳細について

、これらはフラグについてのあなたのオプションは次のとおりです。

enter image description here

あなたは保留中のインテントごとに異なるrequestCodesを持っていることを可能にするために、あなたの仕組みを変更する必要があります。それは多くの仕事かもしれませんが、それはあなたがしなければならないことです。

+0

答えに感謝します。私が変更を加える前に必ず確認しなければなりませんでした。 – Libathos

+0

実際、いいえ。 'Intent'sをすべて一意にするならば、異なる' requestCode'を使う必要はありません。あなたは、それぞれの「意図」内に異なるACTIONまたは異なるデータを設定することによってそれを行うことができます。 –

+0

@David excellent、私は知らなかった。 OPが受諾を削除した場合、私は自分の答えを削除します –

1

Intentは、それぞれ異なるアクションを設定できるようにすることができます。その後、同じrequestCodeを使用することができ、異なるPendingIntentを持っています。

後でアラームをキャンセルできるようにするには、使用するアクションを追跡する必要があります。

関連する問題