数日前、アラームにカスタムインテントを使用する方法を見つけるのに苦労していました。私はいくつかの一意のIDに基づいてインテントをカスタマイズする必要があるという明確な答えを得ましたが、例えば。 setAction()
にはまだ問題があります。
このようにPendingIntentを定義します。
Intent intent = new Intent(this, viewContactQuick.class);
intent.setAction("newmessage"+objContact.getId());//unique per contact
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK ).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP );
intent.putExtra("id", Long.parseLong(objContact.getId()));
intent.putExtra("results", result.toArray());
PendingIntent contentIntent = PendingIntent.getActivity(context, 0, intent, 0);
次に、これは通知マネージャーによって使用されます
NotificationManager mNotificationManager = (NotificationManager) context.getSystemService(ns);
// first try to clear any active notification with this contact ID
mNotificationManager.cancel(Integer.parseInt(objContact.getId()));
// then raise a new notification for this contact ID
mNotificationManager.notify(Integer.parseInt(objContact.getId()), notification);
これは次のように機能します。
問題
これは、連絡先に対して複数回発生する可能性があります。そして、2番目のメッセージが生成されると、通知は適切に発生します(メッセージはそこにあります)が、ユーザーが通知を操作するときに、古いデータを使用するため、新しいメッセージではなく前のメッセージが渡されます。
したがって、いずれにせよ、意図は以前のエクストラをキャッシュして再利用することです。連絡先ごと、アクションごとに一意にするにはどうすればよいですか?
この連絡先のPendingIntents
のいずれか1つだけが未処理になる場合、または常に最新の追加セットを使用する場合は、PendingIntent
を作成するときにFLAG_UPDATE_CURRENT
を使用します。
複数の連絡先固有のPendingIntent
が一度に未処理であり、個別に追加する必要がある場合は、カウントまたはタイムスタンプなどを追加して、それらを区別する必要があります。
intent.setAction("actionstring" + System.currentTimeMillis());
[〜#〜]更新[〜#〜]
また、PendingIntent
のgetActivity()
およびkinへの簡単に文書化された2番目のパラメーターを使用して、同じ基礎となるPendingIntent
に対して別個のIntent
オブジェクトを作成することができます。私はこれを試したことはありませんが。
私は通常、PendingIntentsが互いにオーバーライドしないように、一意のrequestCodeを指定します。
PendingIntent pending = PendingIntent.getService(context, unique_id, intent, 0);
そして、あなたの場合、私はCommonsWareに同意します。FLAG_UPDATE_CURRENTフラグが必要です。新しいエクストラは古い値を上書きします。