1

複数の PendingIntent を作成するにはどうすればよいですか? いくつかの通知があり、ユーザーが最後の通知まで押すとすべて問題ありませんが、それ以外の場合は通知をクリックしても応答しません。私のコードは次のとおりです。

Intent notificationIntent = new Intent(context, MainActivity.class);
notificationIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK).setAction("ShowDialog");
notificationIntent.putExtra("args", Tools.getInstance().generateBundle(progressId, lastId));
notificationBuilder.setContentIntent(PendingIntent.getActivity(context, 0, notificationIntent, PendingIntent.FLAG_CANCEL_CURRENT));

理由は FLAG_CANCEL_CURRENT だと思いますが、PendingIntent のすべてのフラグが私の問題を解決できません。

4

2 に答える 2

3

私の推測では、

保留中のインテントごとに異なる一意のIDを指定するだけで、アプリケーションに問題はありません。

好き、
PendingIntent.getActivity(context, uniqID, nIntent, PendingIntent.FLAG_ONE_SHOT);


インテントを削除または更新する予定がない場合はcalendar.getTimeInMillis()、一意のIDとして使用できます。

于 2012-09-21T09:48:35.687 に答える
0

あなたが説明したことを行うCANCEL_CURRENTフラグを見てください。通知ごとに異なる保留中のインテントを作成する必要があります。そうしないと、それらは同じと見なされます。IntentSender のドキュメントを参照して、個別の保留中のインテントを作成するために何をする必要があるかを確認してください。私のアドバイスは、データ内の ID をエンコードすることです。必要に応じて非常に単純にすることも、意図を特定する意味を持つこともできます。特に興味深いスニペットは次のとおりです。

作成中のアプリケーションが後で同じ種類の IntentSender (同じ操作、同じ Intent アクション、データ、カテゴリ、およびコンポーネント、および同じフラグ) を再取得する場合、それがまだ有効であれば、同じトークンを表す IntentSender を受け取ります。

表示される問題は、保留中の同じインテントを再利用し、新しいインテントを「作成」するときに前のインテントをキャンセルしたことが原因です。

また、設計ガイドラインに従って、各種類の通知を 1 つだけにする必要があることにも注意してください (たとえば、新しい電子メール、新しい SMS などの通知は 1 つだけです)。同じ種類の通知が複数ある場合は、それらを結合する必要があります。 1つの通知に。ただし、あくまでも目安です。

現在のバージョンの Android で「requestCode/uniqueId ソリューション」が機能する理由については、こちらを参照してください。

于 2012-09-21T08:23:52.347 に答える