5

次のコードを使用して、BroadcastReceiver を呼び出して毎日通知を設定するアラームをアプリで作成します。

Intent intent = new Intent(Benachrichtigung.CUSTOM_INTENT);
PendingIntent pendingIntent  = PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);

Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, 8);
calendar.set(Calendar.MINUTE, 00);
calendar.set(Calendar.SECOND, 00);

alram = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
alram.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), (24 * 60 * 60 * 1000), pendingIntent);

ここで、ユーザーが通知の時間を設定できるようにしたいのでcalendar.set、新しい値で呼び出す必要があります。既存のアラームを新しいアラームで上書きするにはどうすればよいですか?

4

1 に答える 1

11

アラームをキャンセルまたは更新するには、filterEquals を使用して一致AlarmManagerする必要があります。したがって、基本的には、元のものと同じものIntentを再作成すると、それらが同じであることがわかります。これには、、、および (何かが欠けている可能性がありますが、それらは重要です。PendingIntentAlarmManagerREQUEST_CODEINTENT_ACTIONINTENT_DATA

ノート:

EXTRAS2 つの の比較には使用されませんIntent

したがって、2 つIntentの s が等しい場合、最初の s が上書きされます。もっと時間があれば、それをよりよく説明するためのリソースを見つけようとします。

Intent Docs filterEqualsによると

インテントの解決 (フィルタリング) のために、2 つのインテントが同じかどうかを判断します。つまり、アクション、データ、タイプ、クラス、およびカテゴリが同じである場合です。これは、インテントに含まれる余分なデータを比較しません。

于 2013-06-19T20:47:12.020 に答える