通知からアクティビティにパラメータを送信する方法を見つけることができます。
通知を作成するサービスがあります。ユーザーが通知をクリックすると、いくつかの特別なパラメーターを使用してメインアクティビティを開きます。たとえば、アイテムIDを使用すると、私のアクティビティで特別なアイテムの詳細ビューを読み込んで表示できます。具体的には、ファイルをダウンロードしています。ファイルがダウンロードされたら、クリックすると特別なモードでアクティビティが開かれるように通知するようにしたいと思います。私はputExtra
自分の意図で使用しようとしましたが、それを抽出できないようですので、間違っていると思います。
通知を作成する私のサービスのコード:
// construct the Notification object.
final Notification notif = new Notification(R.drawable.icon, tickerText, System.currentTimeMillis());
final RemoteViews contentView = new RemoteViews(context.getPackageName(), R.layout.custom_notification_layout);
contentView.setImageViewResource(R.id.image, R.drawable.icon);
contentView.setTextViewText(R.id.text, tickerText);
contentView.setProgressBar(R.id.progress,100,0, false);
notif.contentView = contentView;
Intent notificationIntent = new Intent(context, Main.class);
notificationIntent.putExtra("item_id", "1001"); // <-- HERE I PUT THE EXTRA VALUE
PendingIntent contentIntent = PendingIntent.getActivity(context, 0, notificationIntent, 0);
notif.contentIntent = contentIntent;
nm.notify(id, notif);
通知から追加のパラメーターを取得しようとする私のアクティビティからのコード:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Bundle extras = getIntent().getExtras();
if(extras != null){
Log.i( "dd","Extra:" + extras.getString("item_id") );
}
extrasは常にnullであり、ログに何も記録しません。
ところで...はonCreate
私のアクティビティが開始されたときにのみ実行されます。私のアクティビティがすでに開始されている場合は、エキストラも収集して、受け取ったitem_idに基づいてアクティビティを表示します。
何か案は?
PendingIntent.getActivity()
、フラグを使用して呼び出す必要があります。PendingIntent.FLAG_UPDATE_CURRENT
そうしないと、すべての通知で同じエキストラが再利用されます。