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

Я разрабатываю бизнес-приложение, которое по сути является домашним экраном и должно использоваться в качестве домашнего экрана по умолчанию (будучи приложением «киоск»).

Есть ли способ проверить, является ли моя программа запуска программой запуска по умолчанию? Спасибо!

Пс. Аналогичный пример, но для проверки GPS-настроек

LocationManager alm = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
if (alm.isProviderEnabled(android.location.LocationManager.GPS_PROVIDER)) {
    Stuffs&Actions;
}

person DagW    schedule 28.11.2011    source источник


Ответы (2)


Вы можете получить список предпочтительных действий от PackageManager. Используйте getPreferredActivities().

boolean isMyLauncherDefault() {
    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;
}
person Sergey Glotov    schedule 02.12.2011
comment
Работает отлично. Я использовал имя пакета в качестве третьего параметра, а затем проверил длину списка activities. Если 0, значит не лаунчер. - person Mister Smith; 25.09.2013
comment
в каких случаях действия будут заполнены более чем одним элементом в этом запросе? - person android developer; 22.01.2014
comment
Документация для getPreferredActivities предполагает, что первым аргументом должен быть пустой список, заполняемый методом. Каково именно поведение, когда вы даете список, который уже заполнен, как в вашем примере? - person achoo5000; 02.02.2014
comment
Я проверил андроид исходный код. Нет никакого эффекта от добавления фильтра, как в вашем примере. Я считаю, что лучший способ проверить действие по умолчанию — использовать resolveActivity как в этом ответе на аналогичный вопрос. - person achoo5000; 02.02.2014
comment
Как бы вы нашли все предпочтительные действия для всех намерений, в которых они есть? Вам нужно будет просмотреть все приложения, подготовить фильтр для каждого намерения в манифесте приложения, а затем использовать этот метод? - person android developer; 27.08.2014
comment
Это работает, вы можете просто проверить это с помощью кода: isMyLauncherDefault(); Toast.makeText(getApplicationContext(), Value: + isMyLauncherDefault(), Toast.LENGTH_SHORT).show(); - person Pavel Kostal; 19.09.2019

Котлин версия:

val Context.isMyLauncherDefault: Boolean
  get() = ArrayList<ComponentName>().apply {
    packageManager.getPreferredActivities(
      arrayListOf(IntentFilter(ACTION_MAIN).apply { addCategory(CATEGORY_HOME) }),
      this,
      packageName
    )
  }.isNotEmpty()
person janosch    schedule 22.01.2018