Настройка запуска по умолчанию для продолжения последней активности

Я работаю в режиме киоска в Android, и мое приложение имеет несколько действий. Допустим, они представляют собой Деятельность A, Деятельность B, Деятельность C.

Я устанавливаю Launcher по умолчанию в Activity A. Вот как я это делаю.

PackageManager packageManager = getPackageManager();
ComponentName componentName = new ComponentName(this, FakeLauncherActivity.class);
packageManager.setComponentEnabledSetting(componentName, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);

Intent selector = new Intent(Intent.ACTION_MAIN);
selector.addCategory(Intent.CATEGORY_HOME);
selector.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(selector);

packageManager.setComponentEnabledSetting(componentName, PackageManager.COMPONENT_ENABLED_STATE_DEFAULT, PackageManager.DONT_KILL_APP);

Но моим основным занятием является Занятие B. Поэтому, когда я нахожусь в Занятии B или Занятии C, кнопка "Домой" перезапускает Занятие A. Вместо того, чтобы делать это, я хочу, чтобы оно продолжало мое последнее Занятие и не перезапускало его из Занятия A.

Вот мой манифест:

<application
    android:name="com.bambulabs.codebase.Models.Global"
    android:hardwareAccelerated="false"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:largeHeap="true"
    android:logo="@mipmap/ic_launcher"
    android:theme="@style/MyMaterialTheme"
    tools:replace="android:icon">

    <activity
        android:name="com.bambulabs.codebase.ActivityA"
        android:configChanges="locale"
        android:label="@string/app_name"
        android:screenOrientation="sensorPortrait">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <action android:name="android.net.wifi.WIFI_STATE_CHANGED"/>
            <action android:name="android.net.wifi.SCAN_RESULTS"/>
            <category android:name="android.intent.category.DEFAULT"/>
            <category android:name="android.intent.category.LAUNCHER" />
            <category android:name="android.intent.category.HOME" />
        </intent-filter>
    </activity>

    <activity
        android:name="com.bambulabs.codebase.ActivityB"
        android:configChanges="locale"
        android:label="@string/app_name"
        android:screenOrientation="sensorPortrait"
        android:launchMode="singleTask">
    </activity>

    <activity
        android:name="com.bambulabs.codebase.ActivityC"
        android:configChanges="locale"
        android:label="@string/app_name"
        android:screenOrientation="sensorPortrait">
    </activity>

</application>

Как я могу это сделать?

Примечание: я не хочу использовать дополнительную активность, чтобы решить, где продолжить приложение.

1 ответ

Я нашел ответ!

Все, что я сделал, это переместил атрибут launchMode="singleInstance" на уровень приложения в манифесте и сделал ActivityA launchMode = "singleTop"!

Вот рабочий файл манифеста:

<application
android:name="com.bambulabs.codebase.Models.Global"
android:hardwareAccelerated="false"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:largeHeap="true"
android:logo="@mipmap/ic_launcher"
android:theme="@style/MyMaterialTheme"
tools:replace="android:icon"
android:launchMode="singleInstance">

<activity
    android:name="com.bambulabs.codebase.ActivityA"
    android:configChanges="locale"
    android:label="@string/app_name"
    android:screenOrientation="sensorPortrait"
    android:launchMode="singleTop">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <action android:name="android.net.wifi.WIFI_STATE_CHANGED"/>
        <action android:name="android.net.wifi.SCAN_RESULTS"/>
        <category android:name="android.intent.category.DEFAULT"/>
        <category android:name="android.intent.category.LAUNCHER" />
        <category android:name="android.intent.category.HOME" />
    </intent-filter>
</activity>

<activity
    android:name="com.bambulabs.codebase.ActivityB"
    android:configChanges="locale"
    android:label="@string/app_name"
    android:screenOrientation="sensorPortrait">
</activity>

<activity
    android:name="com.bambulabs.codebase.ActivityC"
    android:configChanges="locale"
    android:label="@string/app_name"
    android:screenOrientation="sensorPortrait">
</activity>

</application>

Для получения дополнительной информации об атрибуте launchMode: https://inthecheesefactory.com/blog/understand-android-activity-launchmode/en

Другие вопросы по тегам