19

アクティビティを起動 (または更新) して製品の説明を表示する通知をいくつか作成したいと考えています。

Notification notification = new Notification(R.drawable.applicationicon,
            Resources.getString("NewSaleNotification", context),
            System.currentTimeMillis());
// Hide the notification after its selected
notification.flags |= Notification.FLAG_AUTO_CANCEL;

Intent intent = new Intent(context, MainApplication.class);
intent.putExtra("saleid", saleid);

// to be sure the activity won't be restarted
intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);

PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent,
            PendingIntent.FLAG_UPDATE_CURRENT);
notification.setLatestEventInfo(context, SaleTitle, SaleMessage, pendingIntent);
notificationManager.notify(saleid, notification);

PendingIntent を作成するとき、FL​​AG_CANCEL_CURRENT、FLAG_NO_CREATE、FLAG_ONE_SHOT、FLAG_UPDATE_CURRENT の 4 つの選択肢があります。

最後の定義( http://developer.android.com/reference/android/app/PendingIntent.html#FLAG_UPDATE_CURRENT )は私がやりたいことですが、うまくいきません。2 つの通知を作成すると、どちらも最新の「saleid」エクストラが同じになります。異なる「saleid」エクストラで複数の通知を行うにはどうすればよいですか?

4

1 に答える 1

28

しかし、それはあるべきように機能しません

はい、そうです。

2 つの通知を作成すると、どちらも最新の「saleid」エクストラが同じになります。

これはまさにドキュメントが言うべきことです。

異なる「saleid」エクストラを使用して複数の通知を行うにはどうすればよいですか?

オプション #1: それぞれに異なるアクション文字列を入れますIntents。これにより、( の観点からfilterEquals())それらが異なり、別々になりPendingIntentsます。ただし、Intent( MainApplication.class) 内にコンポーネントを指定しているため、アクションは のIntentルーティング方法には影響しません。

オプション #2: 呼び出しで別のrequestCode(2 番目のパラメーター) を使用しますgetActivity()。これは「現在使用されていません」と記載されていますが、異なるPendingIntentオブジェクトが返されます。ただし、この動作は文書化されていないため、将来変更される可能性があります。

于 2012-05-10T16:37:26.293 に答える