9

同じpendingIntentを使用して、それぞれに異なるintentIdを使用して複数のアラームを設定しました。アラームが作動しています。今、私は特定のアラームをキャンセルしたいと思います。cancel()メソッドを使用すると、すべてのアラームがキャンセルされてしまいます。特定のものだけを削除したい。また、ユーザーは2回目または3回目の起動中でもこのアラームをキャンセルできる必要があります。2回目に起動したときと同様に、同じpendingIntentオブジェクトはありません。保留中のIntentオブジェクトを永続化する必要がありますか?もしそうなら、どのように?複数のアラームから1つのアラームをキャンセルするにはどうすればよいですか?

4

2 に答える 2

11

あなたはこのようにそれを行うことができます、

unique ID保留中のインテントでは、代わりにを渡すことができますrequestCode

PendingIntent pi = PendingIntent.getBroadcast(context, unique_id, i, 0);

また、キャンセルするには、同じ保留中のインテントを使用して、同じ一意のIDを使用してキャンセルできます。

am.cancel(pi);

より多くの情報を取得するには、StackOverflowまたはGoogleを使用できますが、今のところthis answerはうまくいくと思います。:)

于 2012-01-16T09:23:48.423 に答える
3

これは、説明を使ってこれを行うための一種のハックです。

まず、保留中のインテントに対して一意のインテントを作成する必要があります。この目的のために、アプリケーションのインテントのカスタムデータフィールドを作成できます。私はこれを次のように行います:

Intent intent = new Intent();
intent.setAction(ExampleAppWidgetProvider.MY_INTENT_ACTION);
Uri data = Uri.withAppendedPath(
                Uri.parse("myapp://myapp/Id/#"),
                String.valueOf(intentId));
intent.setData(data);

あなたの場合intentId、インテントのあなたの一意の識別子になります。

次に、通常どおりalarmManager通知を作成します。アラームをキャンセルするには、次の手順を実行する必要があります。最初に、前のコードサンプルのようにインテントを作成する必要があります。次に、このインテントに基づいて保留中のインテントを作成します(アラーム用に同じ保留中のインテントも作成します)。次に、このアラームをキャンセルします。

Intent intent = new Intent();
intent.setAction(ExampleAppWidgetProvider.MY_INTENT_ACTION);
Uri data = Uri.withAppendedPath(
                Uri.parse("myapp://myapp/Id/#"),
            String.valueOf(intentId));
intent.setData(data);


PendingIntent pendingIntent = PendingIntent.getBroadcast(
                context, 0, intent,
                PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
alarmManager.cancel(pendingIntent);
于 2012-01-16T09:10:33.883 に答える