Как получить список установленных программ для телефонов Android
Класс Android PackageManager используется для получения информации о пакете прикладного программного обеспечения, установленном в настоящее время на устройстве. Вы можете получить экземпляр класса PackageManager, вызвав getpackagemanager (). Предоставляет методы для запроса и управления установочными пакетами и соответствующими разрешениями. В следующем примере Android мы получаем список приложений, установленных на Android.
PackageManager packageManager = getPackageManager(); List list = packageManager.getInstalledApplications(PackageManager.GET_META_DATA) Скопировать код
packageManager.getInstalledApplications () возвращает список пакетов приложений, которые все установлены на устройстве. Если мы установим флаг GET_UNINSTALLED_PACKAGES, будут возвращены все приложения в списке, включая те, которые установлены на dont_delete_data (каталоги данных некоторых установленных приложений).
1. Создайте файл макета
activity_main.xml
Вы можете увидеть скриншот во вложении, мы создадим список, в котором будут показаны все установленные приложения.
Конвертируем сайт в приложение на примере IPTV плеера
snippet_list_row.xml
Этот макет используется адаптером ListView для представления сведений о приложении. Он отображает значок приложения, имя приложения и пакет приложения.
2. класс java
AllAppsActivity.java
Это основной класс приложения, используемый для инициализации и вывода списка установленных приложений. Получение списка деталей приложения из packagemanage — трудоемкая задача, мы сделаем это в AsyncTask. В то же время класс использует настраиваемый адаптер «custom listview applicationadapter».
ApplicationAdapter.java
Источник: russianblogs.com
Как получить список приложений, установленных пользователем на Android-устройстве?
В настоящий момент я использую следующий фрагмент кода:
List packs = getPackageManager().getInstalledPackages(0);
Но он возвращает приложения, которые были установлены как производителем устройства, так и мной. Как его ограничить, чтобы возвращались только те приложения, которые я установил?
Raunak 5 Янв 2011 в 00:47
9 ответов
Лучший ответ
// Flags: See below int flags = PackageManager.GET_META_DATA | PackageManager.GET_SHARED_LIBRARY_FILES | PackageManager.GET_UNINSTALLED_PACKAGES; PackageManager pm = getPackageManager(); List applications = pm.getInstalledApplications(flags); for (ApplicationInfo appInfo : applications) < if ((appInfo.flags // System application >else < // Installed by user >>
- GET_META_DATA
- GET_SHARED_LIBRARY_FILES
- GET_UNINSTALLED_PACKAGES
Mark Renouf 27 Мар 2014 в 00:18
Зелимир ответил правильно. Но в некоторых случаях он не предоставит вам все установленные сторонние приложения. ApplicationInfo также имеет флаг FLAG_UPDATED_SYSTEM_APP , который установлен
Приложение Qr-List
Если это приложение было установлено как обновление встроенного системного приложения
На моем смартфоне такие приложения включают Amazone Kindle, Adobe Reader, Slacker Radio и другие. Эти приложения не поставлялись с телефоном и были установлены из Google Play Store. Таким образом, их можно рассматривать как сторонние приложения.
Так что вы также можете проверить флаг FLAG_UPDATED_SYSTEM_APP .
final PackageManager packageManager = _context.getPackageManager(); List installedApplications = packageManager.getInstalledApplications(PackageManager.GET_META_DATA); for (ApplicationInfo appInfo : installedApplications) < if ((appInfo.flags // IS A SYSTEM APP >if ((appInfo.flags // APP WAS INSTALL AS AN UPDATE TO A BUILD-IN SYSTEM APP >>
Nikolai Samteladze 3 Сен 2012 в 02:11
Если я сделаю pkgAppsList.get (0), он вернет объект ResolveInfo. Как мне получить такую информацию, как значок и имя пакета?
Просто сделай это:
ResolveInfo info = pkgAppsList.get(0); ApplicationInfo appInfo = info.activityInfo.applicationInfo; PackageManager packageManager = = getPackageManager(); //And then you retrieve all needed data: Drawable packageIcon = packageManager.getApplicationIcon(applicationInfo); //Icon String packageName = applicationInfo.packageName; //Package name String packageLabel = String.valueOf(packageManager.getApplicationLabel(applicationInfo)) //Package label(app name)
Anton Cherkashyn 28 Мар 2012 в 08:04
final Intent mainIntent = new Intent(Intent.ACTION_MAIN, null); mainIntent.addCategory(Intent.CATEGORY_LAUNCHER); final List pkgAppsList = context.getPackageManager().queryIntentActivities( mainIntent, 0);
user547995 5 Янв 2011 в 01:07
Ответ Николая правильный, но его можно оптимизировать с помощью итератора. Вот что я придумал:
/** * Return list of installed user applications */ static List getUserInstalledApplications(Context context) < // Get installed applications final PackageManager packageManager = context.getPackageManager(); ListinstalledApplications = packageManager.getInstalledApplications(PackageManager.GET_META_DATA); // Remove system apps Iterator it = installedApplications.iterator(); while (it.hasNext()) < ApplicationInfo appInfo = it.next(); if ((appInfo.flags it.remove(); >> // Return installed applications return installedApplications; >
Ofir 16 Авг 2016 в 07:33
Отвечая на этот вопрос для Android 11 / API 30
context.getPackageManager().getInstalledApplications(PackageManager.GET_META_DATA); Приведенный выше код возвращает список системных приложений, поскольку пользовательские приложения не отображаются по умолчанию, вам необходимо добавить разрешение ниже в манифест, чтобы получить список пользовательских приложений.
Ketan sangle 20 Ноя 2020 в 20:37
Если вы хотите узнать, как это сделать в Kotlin, это показано ниже, хотя, как упоминалось ранее Ketan sangle, вам нужно будет добавить в свой файл AndroidManifest.xml.
val packages = packageManager.getInstalledApplications(PackageManager.GET_META_DATA) for (packageInfo in packages) < if (packageInfo.flags and ApplicationInfo.FLAG_SYSTEM != 1) < //enter what you want to do here >>
В этом случае я использовал системный флаг, чтобы исключить системные приложения, и вы можете найти другие флаги здесь
Eric 30 Янв 2021 в 19:26
- pkgAppsList.get(i).activityInfo.packageName , чтобы получить packageName
- pkgAppsList.get(i).activityInfo.applicationInfo.loadLabel(getPackageManager()).toString() к fetch app level name
Ganesh Kamath — ‘Code Frenzy’ 12 Фев 2015 в 14:20
Класс Android PackageManager используется для получения информации о пакетах приложений, которые в настоящее время установлены на устройстве. Вы можете получить экземпляр класса PackageManager, вызвав getPackageManager (). PackageManager предоставляет методы для запроса и управления установленными пакетами и соответствующими разрешениями и т. Д. В этом примере Android мы получаем список установленных приложений в Android.
PackageManager packageManager = getPackageManager (); Список list = packageManager.getInstalledApplications (PackageManager.GET_META_DATA)
PackageManager.getInstalledApplications () возвращает список всех пакетов приложений, установленных на устройстве. Если мы установим флаг GET_UNINSTALLED_PACKAGES, будет возвращен список всех приложений, включая те, которые были удалены с помощью DONT_DELETE_DATA (частично установленные приложения с каталогом данных).
Источник: question-it.com