Android - обеспечить обратную навигацию при запуске приложения из уведомления

У меня есть приложение для Android, в котором HomeActivity является родительской активностью всех остальных действий. это означает, что у меня всегда есть его экземпляр, и если вы нажмете кнопку назад из любого действия, вы перейдете к этому действию.

Теперь есть возможность запустить приложение из уведомления.

Когда пользователь щелкает уведомление, я запускаю RidesActivity (одно из других действий), и в этом случае, если я нажимаю назад, приложение закрывается (нет экземпляра HomeActivity).

Что я могу сделать, чтобы запустить экземпляр HomeActivity в фоновом режиме и убедиться, что если пользователь нажмет назад, он перейдет к HomeActivity?


person Ofek Agmon    schedule 08.11.2015    source источник


Ответы (1)


Android возвращается к последнему действию, когда вы нажимаете кнопку «Назад», но в вашей точке последнего действия нет, потому что вы напрямую запускаете RidesActivity.

Чтобы решить эту проблему, вы можете запустить свою MainActivity через Intent из уведомления вместо RidesActivity и указать дополнительную информацию для запуска непосредственно RidesActivity.

Код для вашего уведомления:

Intent intent = new Intent(context, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); //is important to start the activity from a notification
intent.putExtra("startRidesActivity", true);
startActivity(intent);

Код для вашего метода MainActivity, onCreate:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    /*
    * Put the following at the end of this method
    */
    Bundle bundle = getIntent().getExtras();
    if(bundle!=null && bundle.containsKey("startRidesActivity")){
        Intent intent = new Intent(this, RidesActivity.class);
        startActivity(intent);
    }
}

Вот и все. Теперь ваше уведомление открывает MainActivity, а MainActivity запускает непосредственно вашу RidesActivity. Если вы нажмете кнопку «Назад», вы должны увидеть свою основную активность, а не домашний экран.

person Larcado    schedule 08.11.2015
comment
отличный ответ! большое спасибо. просто чтобы я знал, почему важно добавить флаг NEW_TASK, когда вы начинаете активность из уведомления? в каких еще случаях нужно ставить этот флаг? - person Ofek Agmon; 08.11.2015
comment
Это важно, потому что уведомление не запускается в контексте вашего приложения, и Android нужна эта информация, чтобы запустить ваше приложение в новой задаче. Здесь это хорошо объяснено: stackoverflow.com/questions/30886618/ - person Larcado; 08.11.2015
comment
понятно. Кроме того, если я получу уведомление, когда нахожусь в приложении, и нажму на него, у меня будут действия в следующем порядке: RidesActivity->HomeActivity->любые другие действия, которые выполнялись. Должен ли я убивать все остальные действия при нажатии на уведомление? - person Ofek Agmon; 08.11.2015