0

したがって、同じ方法を使用して複数のワンショット アラームをスケジュールし、それぞれのスケジュールされた時刻に通知をスローするアプリがあるとします。私が見つけた他の例と比較して、これを処理するために作成したメソッドが機能することはかなり確信しています (まだテストしていませんが) 。とにかく、私を悩ませているのは、ドキュメントの何かです。

public void cancel (PendingIntent 操作) 以降: API レベル 1

インテントが一致するアラームをすべて削除します。(filterEquals(Intent) で定義されているように) Intent がこれと一致する任意のタイプのアラームはキャンセルされます。

このアプリケーションは複数のワンショット アラームを持つように設計されているため、これらはすべて同じ方法で作成された同じベース インテントに由来するため、1 つのアラームをキャンセルするとすべてのアラームがキャンセルされるという私の仮定はどうかと思います。もしそうなら、どうすればこれを回避できますか?

4

1 に答える 1

3

次のような一意の ID を使用してそれぞれを作成することにより、アラームを区別できます。

Intent intent = new Intent(this, AlarmReceiverActivity.class);
PendingIntent pi = PendingIntent.getActivity(this,UNIQUE_ID_GOES_HERE, intent, 0);
AlarmManager am = (AlarmManager)getSystemService(Activity.ALARM_SERVICE);
am.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(),pi);

このアラームをキャンセルするには、同じ一意の ID を持つ同じ PendingIntent を作成する必要があります。たとえば、次の例では、PendingIntent ID 1234 で作成したアラームのみがキャンセルされます。

Intent intent = new Intent(this, AlarmReceiverActivity.class);
PendingIntent pi = PendingIntent.getBroadcast(this, 1234, intent, 0);
AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);

am.cancel(pi);

考え方は単純です。ID を追跡し、それらを使用してそれぞれのアラームをキャンセルします。同じ ID で複数のアラームを作成すると、最新のアラームが前のアラームをキャンセルします。

最終的に、一意の PendingIntent を持つ複数のアラームを持つことができますが、同じ PendingIntent を持つことはできません。

于 2012-07-06T01:45:35.867 に答える