Android вернуться к последней открытой активности при нажатии на значок приложения

android

1130 просмотра

3 ответа

299 Репутация автора

Я искал некоторые предложения для возврата к последней открытой активности при запуске из значка приложения. Но все же есть некоторые побочные эффекты для обработки.

LauncherActivity - это входная активность, которая прослушивает

<activity
            android:name="com.app.ui.LauncherActivity"
            android:configChanges="orientation|keyboardHidden"
            android:launchMode="singleTask"
            android:screenOrientation="nosensor">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
</activity>

Тогда есть другое второе действие и третье действие.

Мой сценарий, как показано ниже:

1. LauncherActivity -> SecondActivity 
2. SecondActivity -> ThirdActivity (When launching ThirdAcitivity, SecondActivity will finish itself)

Так что, когда в ThirdActivity, пользователь нажимает клавишу домой. Если приложение открыто из недавней Задачи, то будет отображаться последнее открытое ThirdActivity. Это поведение, которое я хочу.

Но когда приложение открывается из ярлыка приложения, оно переходит к LauncherActivity. Но я хочу, чтобы это было таким же поведением, как недавняя задача. Если последний открытый ThirdActivity не уничтожается, он должен показать это вместо LauncherActivity.

Однако, если приложение принудительно останавливается, а затем перезапускается или ThirdActivity уничтожается, нет необходимости возвращаться к ThirdActivity. Вернуться к LauncherДеятельность в порядке.

Я искал решение. Предложение сохранить последнее действие в sharedPreference не подходит для моего случая.

Я хотел бы знать, как добиться, как запуск из недавней задачи. Кто-нибудь может мне помочь. Большое спасибо.

Автор: rodent_la Источник Размещён: 19.07.2016 05:14

Ответы (3)


4 плюса

765 Репутация автора

Решение

В вашем методе Launcher onCreate () напишите это:

if (!isTaskRoot()
            && getIntent().hasCategory(Intent.CATEGORY_LAUNCHER)
            && getIntent().getAction() != null
            && getIntent().getAction().equals(Intent.ACTION_MAIN)) {

        finish();
        return;
}

isTaskRoot () имеет значение true, когда в стеке действий нет действий. В вашем случае, если в стеке Activity есть другое действие (Третье действие в вашем случае), приведенный выше код завершит запускающее действие и выведет на экран Третье действие.

Автор: DsD Размещён: 19.07.2016 05:32

0 плюса

637 Репутация автора

Вы можете справиться с этим, имея три фрагмента в одном упражнении. Пусть эта активность будет вашей LaunchActivity, тогда она имеет фильтр намерений LAUNCHER и всегда открывается при нажатии значка приложения. Если в этом упражнении было три фрагмента, последний фрагмент открывается так же, как при открытии приложения из недавних задач.

Автор: hadilq Размещён: 19.07.2016 05:33

0 плюса

3401 Репутация автора

Вы также можете удалить launchMode="singleTask". Большинству приложений это не нужно.

Автор: Lev Размещён: 04.01.2017 03:25
Вопросы из категории :
32x32