Выбор средства запуска в намерении не работает

Я могу вызвать всплывающее окно выбора средства запуска с помощью приведенного ниже кода, из которого я могу выбрать свой модуль запуска. Но в планшете huawei этот код не работает

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

Помогите мне, пожалуйста!!


person user369932    schedule 22.10.2018    source источник
comment
Пожалуйста, ознакомьтесь с моим обновленным решением.   -  person Ümañg ßürmån    schedule 22.10.2018


Ответы (1)


Решение:

На самом деле это возможно с небольшим обходным путем:

Создайте пустой Activity, который действует как пусковая установка с именем FakeLauncherActivity. Добавьте его в свой манифест как компонент disabled:

<activity
    android:name="com.path.to.your.FakeLauncherActivity"
    android:enabled="false">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />

        <category android:name="android.intent.category.HOME" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

Проверьте, является ли желаемая активность запуска по умолчанию.

Если нет, предложите пользователю выбрать предпочтительную активность запуска, например:

public static void resetPreferredLauncherAndOpenChooser(Context context) {
    PackageManager packageManager = context.getPackageManager();
    ComponentName componentName = new ComponentName(context, com.path.to.your.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);
    context.startActivity(selector);

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

Этот метод временно включает FakeLauncherActivity, что приводит к изменению набора доступных действий лаунчера, что вынуждает Android забыть лаунчер по умолчанию. Вы увидите что-то вроде...

521-735/system_process I/PackageManager﹕ Result set changed, dropping preferred activity for Intent { act=android.intent.action.MAIN cat=[android.intent.category.HOME] flg=0x10000000 } type null

... в вашем журнале.

Затем метод просто открывает средство запуска, где вы можете увидеть все установленные средства запуска и кнопки «Всегда» / «Только один раз». Наконец, метод снова отключает FakeLauncherActivity, чтобы он не отображался в списке.

Вы можете повторять это так часто, как хотите, и позволять пользователю продолжать работу только в том случае, если желаемая активность запуска установлена ​​​​по умолчанию.

Источник: Получено отсюда

person Ümañg ßürmån    schedule 22.10.2018
comment
Привет Уманг, спасибо за повтор. Код выше не работает. Он просто покажет всплывающее окно выбора. Но мне нужно родное всплывающее окно выбора Launcher с опцией «Всегда» и «Только один раз», чтобы сделать мою программу запуска по умолчанию. :( - person user369932; 22.10.2018