1. ホーム
  2. android

[解決済み] PendingIntentは、最初の通知では正しく動作しますが、残りの通知では正しく動作しません。

2023-02-20 17:54:26

質問

  protected void displayNotification(String response) {
    Intent intent = new Intent(context, testActivity.class);
    PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, Intent.FLAG_ACTIVITY_NEW_TASK);

    Notification notification = new Notification(R.drawable.icon, "Upload Started", System.currentTimeMillis());
    notification.setLatestEventInfo(context, "Upload", response, pendingIntent);

    nManager.notify((int)System.currentTimeMillis(), notification);
}

この関数は複数回呼び出される予定です。 私はそれぞれの notification をクリックすると、testActivity が起動するようにしたいです。 残念ながら、最初の通知だけがtestActivityを起動します。 残りをクリックすると、通知ウィンドウが最小化されます。

おまけ情報です。 機能 displayNotification() というクラスは UploadManager . Context に渡されます。 UploadManager に渡されます。 activity をインスタンス化します。機能 displayNotification() は、同じくUploadManagerの関数から複数回呼び出され、その関数は AsyncTask .

編集1: 書き忘れましたが、String レスポンスを Intent intent として extra .

  protected void displayNotification(String response) {
    Intent intent = new Intent(context, testActivity.class);
    intent.putExtra("response", response);
    PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);

通知が作成されたとき、Stringレスポンスが何であったかを反映するために、余分な"response"が必要なので、これは大きな違いを生み出します。 その代わりに PendingIntent.FLAG_UPDATE_CURRENT を使用すると、余分な "response"は、最後に displayNotification() .

のドキュメントを読むと、なぜそうなるのかがわかります。 FLAG_UPDATE_CURRENT . しかし、今のところどのように回避すればいいのかわかりません。

どのように解決するのですか?

を使用しないでください。 Intent.FLAG_ACTIVITY_NEW_TASK PendingIntent.getActivityには、以下のように記述します。 FLAG_ONE_SHOT の代わりに


コメントからコピーしました。

次に、Intentに何らかのダミーアクションを設定します。そうしないと、extraは削除されます。例えば

intent.setAction(Long.toString(System.currentTimeMillis()))