Как определить список приложений Android, которые находятся в панели приложений

Я использую класс Package Manager, чтобы получить список всех установленных приложений. Я попытался использовать следующие флаги, чтобы определить, что было "пользовательским приложением" против "системного приложения":

ApplicationInfo.FLAG_SYSTEM
ApplicationInfo.FLAG_UPDATED_SYSTEM_APP

Это сработало, но не так, как я хотел. Я хочу иметь возможность отфильтровать список всех приложений, чтобы определить: это приложение видно в панели приложений?

Я не хочу взаимодействовать с низкоуровневыми системными приложениями, так как это может вызвать нежелательные побочные эффекты. Но я хочу включить такие вещи, как "com.google.chrome", потому что это приложение в панели приложений, но технически оно установлено как системное приложение.

Я сделал отладку в списке ApplicationInfo, возвращенном из диспетчера пакетов, и обнаружил, что некоторые приложения имеют значение Int Icon 0 или что-то еще (1254865 и т. Д.). Итак, я попробовал:

List<ApplicationInfo> allApps = Utilities.getAllApps(mContext);
List<ApplicationInfo> visibleApps = new ArrayList<>();
for (ApplicationInfo appInfo : allApps) {
    if (appInfo.icon != 0) {
      visibleApps.add(appInfo);
    }
}

Это помогло мне стать ближе, но на моем стоковом эмуляторе есть 100 "allApps", и эта логика помогла мне перейти к 54 приложениям. Но в ящике всего 25 приложений...

1 ответ

Решение

Это приложение видно в ящике приложения?

Если под "ящиком приложения" вы имеете в виду средство запуска домашнего экрана, решение о том, что там показывать, остается за разработчиками средства запуска домашнего экрана.

Вы можете узнать, какие действия предлагаются для показа на панели запуска домашнего экрана, с помощью PackageManager а также queryIntentActivities(), находясь в поиске ACTION_MAIN/CATEGORY_LAUNCHER деятельность. Отсюда вы можете получить список приложений, предлагающих эти действия (имея в виду, что любое приложение может предлагать 0, 1 или несколько таких действий).

Другие вопросы по тегам