1. ホーム
  2. アンドロイド

[解決済み】通知クリックからアクティビティにパラメータを送信する方法は?

2022-04-09 04:26:12

質問

通知から自分のアクティビティにパラメータを送信する方法を見つけることができます。

私は通知を作成するサービスを持っています。ユーザーが通知をクリックすると、私はいくつかの特別なパラメータで私のメイン活動を開きたいと思います。例えば、アイテムID、私のアクティビティは特別なアイテム詳細ビューをロードして表示することができます。より具体的には、私はファイルをダウンロードしており、ファイルがダウンロードされるとき、クリックされると特別なモードで私の活動を開くという意図を通知に持たせたいのです。私は使用しようとしました putExtra をインテントに追加しましたが、うまく抽出できませんでした。

Notificationを作成する私のサービスのコードです。

        // 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に従って私の活動を提示したいと思います。

何かアイデアはありますか?

解決するには?

このガイドをご覧ください ( 通知の作成 ) とサンプルApiDemoの "StatusBarNotifications" と "NotificationDisplay" を参照してください。

アクティビティがすでに実行されている場合の管理には、2つの方法があります。

  1. 追加 flag_activity_single_top フラグを、アクティビティ起動時のIntentに追加し、アクティビティクラスに実装します。 onNewIntent(Intent intent) イベントハンドラを使用すると、アクティビティに呼び出された新しいインテントにアクセスできます(単に getIntent() を呼び出すのとは異なり、これは常にアクティビティを開始した最初のインテントを返します)。

  2. 1と同じですが、Intentにフラグを追加するのではなく、Intentの中に "singleTop" をアクティビティ AndroidManifest.xml に追加してください。

インテンション・エクストラを使用する場合は PendingIntent.getActivity() というフラグで PendingIntent.FLAG_UPDATE_CURRENT そうでない場合は、すべての通知で同じエクストラが再利用されます。