#android #launcher #homescreen
#Android #лаунчер #рабочий стол
Вопрос:
В моем приложении я хочу показать список всех доступных лаунчеров (для рабочего стола) на этом конкретном телефоне Android. Возможно ли получить какую-либо информацию из ОС Android и как мне выполнить этот вызов?
Спасибо!
С уважением, Дэниел
Ответ №1:
Вы можете запросить список ResolverInfo, которые соответствуют определенному намерению. В следующем фрагменте кода выведите все установленные лаунчеры.
PackageManager pm = getPackageManager();
Intent i = new Intent(Intent.ACTION_MAIN);
i.addCategory(Intent.CATEGORY_HOME);
List<ResolveInfo> lst = pm.queryIntentActivities(i, 0);
for (ResolveInfo resolveInfo : lst) {
Log.d("Test", "New Launcher Found: " resolveInfo.activityInfo.packageName);
}
Комментарии:
1. 1. вы должны проверить
(!lst.isEmpty())
, провожать . ссылка . 2. Ваш ответ лучше, чем у @Flavio, смотрите комментарии2. Также используйте
Intent.ACTION_MAIN
for Intent action иIntent.CATEGORY_HOME
for Intent category вместо жестко закодированных строк.3. проверка isEmpty () здесь бесполезна для каждого
4. Спасибо @electrocrat и JacksOnF1re за предложения. Ответ отредактирован.
Ответ №2:
Приведенный выше фрагмент кода работает некорректно, поскольку в результате список лаунчеров также включает приложение системных настроек, имя пакета которого com.android.settings. Этот неожиданный результат происходит как на моем Pixel 2 (Android 8.0), так и на Nexus 6 (Android 7.1).
Ответ №3:
Попробуйте следующее:
-
Получите список установленных приложений:
Список pkgList = getPackageManager().Получите установленные пакеты (PackageManager.GET_ACTIVITIES);
-
Выполните итерацию по этому списку и получите активность лаунчера с помощью:
getPackageManager().getLaunchIntentForPackage(имя_пакета);
Подробнее читайте здесь: PackageManager. Надеюсь, это поможет.
Комментарии:
1. IIUC,
getLaunchIntentForPackage(..)
вернет вам намерение запуска для любого приложения, а не только для лаунчера. Например. приложения «Настройки» и «Медиаплеер» также имеют намерения запуска