How do you build an Android back stack when an activity is started directly from a notification?

Andrew C picture Andrew C · Aug 18, 2011 · Viewed 10.5k times · Source

I have two activities:

Activity A - list of items
Activity B - detail view of an item

Normally, a user opens the app and Activity A is launched. A user sees a list of items, clicks one, and Activity B is started to display the item detail.

Activity B can also be started directly from clicking on a notification. In this case there is no back stack.

How can I make it so that when Activity B is started directly from a notification, the user can click the Back button and go to Activity A?

Answer

Dan J picture Dan J · Oct 25, 2011

You can add an Extra into the Intent launched by the notification to detect when the app has been launched in that way.

Then you can override the onBackPressed() Activity method and handle that scenario, e.g.

  @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();
    }    
  }