Как вызвать приглашение запуска по умолчанию?

Я хочу определить, является ли мое приложение запуска средством запуска по умолчанию, и если нет, появится запрос, чтобы пользователь выбрал мое приложение в качестве средства запуска по умолчанию. Проблема, с которой я сталкиваюсь, заключается в том, что подсказка появляется без вариантов «Только один раз» и «Всегда». Кроме того, выбор в моем приложении запуска не устанавливает значение по умолчанию.

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

    if (!isMyAppLauncherDefault()) {
        Intent intent = new Intent(Intent.ACTION_MAIN);
        intent.addCategory(Intent.CATEGORY_HOME);
        intent.addCategory(Intent.CATEGORY_DEFAULT);
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

        startActivity(Intent.createChooser(intent, "Set as default to enable Kiosk Mode"));
    }

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

private boolean isMyAppLauncherDefault() {
    final IntentFilter filter = new IntentFilter(Intent.ACTION_MAIN);
    filter.addCategory(Intent.CATEGORY_HOME);

    List<IntentFilter> filters = new ArrayList<IntentFilter>();
    filters.add(filter);

    final String myPackageName = getPackageName();
    List<ComponentName> activities = new ArrayList<ComponentName>();
    final PackageManager packageManager = (PackageManager) getPackageManager();

    // You can use name of your package here as third argument
    packageManager.getPreferredActivities(filters, activities, null);

    for (ComponentName activity : activities) {
        if (myPackageName.equals(activity.getPackageName())) {
            return true;
        }
    }
    return false;   
}

Примечание. Я попытался изменить способ запуска своего намерения (см. фрагмент кода ниже). Но тогда лаунчер вообще не заходит. Ничего не произошло.

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

Как я могу заставить отображать кнопку ВСЕГДА и как я могу установить фактические настройки запуска по умолчанию. Заранее спасибо!


person portfoliobuilder    schedule 05.01.2015    source источник
comment
См. stackoverflow.com/questions/12780820/   -  person Marcin Orlowski    schedule 05.01.2015


Ответы (1)


Проблема, с которой я сталкиваюсь, заключается в том, что подсказка появляется без вариантов «Только один раз» и «Всегда».

createChooser() вызывает это -- это предназначено для одноразового выбора, без возможности сделать значение по умолчанию. Удалите вызов createChooser() и просто используйте созданный вами Intent. Если лаунчера по умолчанию нет, пользователь получит стандартный селектор с опциями «Только один раз» и «Всегда».

Однако обратите внимание, что если по умолчанию используется другой модуль запуска, то ваш Intent будет просто перенаправляться на этот модуль запуска. В этом случае вы ничего не можете сделать, кроме как подсказать пользователю, как зайти в «Настройки» и удалить его ассоциацию по умолчанию для этого приложения.

person CommonsWare    schedule 05.01.2015
comment
Теперь не запускается лаунчер. - person portfoliobuilder; 06.01.2015
comment
@portfoliobuilder: удалите CATEGORY_DEFAULT. Это не требуется для реализации домашнего экрана, и, вы нуждаетесь в этом, вы исключаете варианты. В вашем случае вам нужен наиболее общий Intent из возможных, который представляет ваш возможный набор параметров, а именно ACTION_MAIN/CATEGORY_HOME. - person CommonsWare; 06.01.2015