24

私には2つの活動があります:

アクティビティ A - アイテムのリスト
アクティビティ B - アイテムの詳細ビュー

通常、ユーザーがアプリを開くと、アクティビティ A が起動します。ユーザーがアイテムのリストを表示し、1 つをクリックすると、アクティビティ B が開始されてアイテムの詳細が表示されます。

アクティビティ B は、通知をクリックして直接開始することもできます。この場合、バックスタックはありません。

アクティビティ B が通知から直接開始されたときに、ユーザーが [戻る] ボタンをクリックしてアクティビティ A に移動できるようにするにはどうすればよいですか?

4

4 に答える 4

24

通知によって起動されたインテントにエクストラを追加して、アプリがその方法で起動されたことを検出できます。

onBackPressed()次に、 Activityメソッドをオーバーライドして、そのシナリオを処理できます。

  @Override
  public void onBackPressed()
  {
    Bundle extras = getIntent().getExtras();

    boolean launchedFromNotif = false;

    if (extras.containsKey("EXTRA_LAUNCHED_BY_NOTIFICATION"))
    {
      launchedFromNotif = extras.getBoolean("EXTRA_LAUNCHED_BY_NOTIFICATION");
    }

    if (launchedFromNotif)
    {
      // Launched from notification, handle as special case
      Intent intent = new Intent(this, ActivityA.class);
      intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
      mActivity.startActivity(intent);
      finish();
    }
    else
    {
      super.onBackPressed();
    }    
  }
于 2011-10-25T18:40:09.137 に答える
9

通知を受け取ったら、これに注意する必要があります。

私は同様の状況を解決しました:

 Intent intent = new Intent(context,ListDetail.class);
 TaskStackBuilder stackBuilder = TaskStackBuilder.create(context);
 stackBuilder.addParentStack(ListDetail.class);
 stackBuilder.addNextIntent(intent);
 PendingIntent contentIntent =
            stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);
 NotificationManager mNotifM = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
 Notification.Builder mBuilder = new Notification.Builder(context);
 mNotifM.notify(NotificationId.getID(), mBuilder.setStyle(new Notification.BigTextStyle(mBuilder)
            .bigText(bigText)
            .setBigContentTitle(title)
            .setSummaryText(summaryText))
            .setContentTitle(title)
            .setSmallIcon(icon)
            .setContentText(summaryText)
            .setAutoCancel(true)
            .setContentIntent(contentIntent)
            .setTicker(bigText)
            .build());

マニフェストでアクティビティの階層を設定する必要があります。

<activity
        android:name=".ListDetail"
        android:label="Detail"
        android:parentActivityName=".List" >
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value=".List" />
</activity>
于 2015-05-01T16:47:37.377 に答える