1

これに対する答えが見つからないようですが、一致を渡してPendingIntentアラームから削除する基準は何ですか? それは com.blah.package.myclass のような名前だけに基づいていますか、Extraそれとも重要ですか?

たとえば、私はこのようなことをしており、すべてのアラームが同じ意図を発します:

    public void setAlarm(Context context, long nextAlarmMillis) {
        Intent intent = new Intent(context, AlarmReceiver.class);
        intent.putExtra("alarm", this);
        PendingIntent sender = PendingIntent.getBroadcast(context, 1234 /* unused */, intent, PendingIntent.FLAG_UPDATE_CURRENT);

        // Get the AlarmManager service
        AlarmManager am = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
        am.cancel(sender);
        am.set(AlarmManager.RTC_WAKEUP, nextAlarmMillis, sender);
    }

何が起こるかというと、Alarmクラスを変更するなどして、 として渡すことができますExtra。以前のアラームをキャンセルしていますが、それが何かを行っているかどうか、または残りのアラームが残るかどうかはわかりません。

誰でも確かに知っていますか?

4

1 に答える 1

3

以下はAlarmManagerドキュメントに記載されています

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

filterEquals ()は次のように定義されます。

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

PendingIntentAlarmManager に渡された参照を保持し、それを渡してキャンセルするのが最も簡単だと思います。または、そのような pi を構築するファクトリ メソッドがあります。

于 2012-06-11T01:23:34.920 に答える