2015-01-05 3 views
3

Я хочу определить, является ли мое приложение для запуска программой запуска по умолчанию, и если вы не вызываете приглашение, чтобы пользователь выбирал мое приложение в качестве пусковой установки по умолчанию. Проблема, с которой я столкнулся, заключается в том, что приглашение появляется без опций «Just Once» и «Always». Кроме того, при выборе в моем приложении launcher не задано значение по умолчанию.Как вызвать подсказку запуска запуска по умолчанию?

В моем 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); 

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

+0

См. Http://stackoverflow.com/questions/12780820/cannot-make-startactivity-with-chooser-asking-just-once-per-app –

ответ

6

Проблема, с которой я сталкиваюсь, заключается в том, что приглашение появляется без параметров «Just Once» и «Always».

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

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

+1

Не запускается пусковая установка. – portfoliobuilder

+0

@portfoliobuilder: Удалите 'CATEGORY_DEFAULT'. Это не требуется для реализации на домашнем экране, и по вашему требованию вы устраняете параметры. В вашем случае вы хотите, чтобы наиболее общий «Intent» мог представлять ваш возможный набор параметров, и это «ACTION_MAIN' /' CATEGORY_HOME ». – CommonsWare

Смежные вопросы