Как получить список приложений, которые были установлены пользователем на устройстве Android? - PullRequest
14 голосов
/ 05 января 2011

Я сейчас использую следующий фрагмент кода:

List<PackageInfo> packs = getPackageManager().getInstalledPackages(0);

но он возвращает приложения, которые были установлены как производителем устройства, так и мной. Как ограничить его, чтобы возвращались только те приложения, которые я установил?

Ответы [ 7 ]

36 голосов
/ 05 января 2011
// Flags: See below
int flags = PackageManager.GET_META_DATA | 
            PackageManager.GET_SHARED_LIBRARY_FILES |     
            PackageManager.GET_UNINSTALLED_PACKAGES;

PackageManager pm = getPackageManager();
List<ApplicationInfo> applications = pm.getInstalledApplications(flags);
for (ApplicationInfo appInfo : applications) {
    if ((appInfo.flags & ApplicationInfo.FLAG_SYSTEM) == 1) {
        // System application
    } else {
        // Installed by user
    }
}

Флаги:

10 голосов
/ 03 сентября 2012

Ответ Зелимира верный.Но в некоторых случаях это не даст вам все установленные сторонние приложения.ApplicationInfo также имеет флаг FLAG_UPDATED_SYSTEM_APP, который установлен

Если это приложение было установлено в качестве обновления встроенного системного приложения

На моем смартфонеК таким приложениям относятся Amazone Kindle, Adobe Reader, Slacker Radio и другие.Эти приложения не поставлялись с телефоном и были установлены из Google Play Store.Таким образом, они могут рассматриваться как сторонние приложения.

Итак, вы также можете установить флажок FLAG_UPDATED_SYSTEM_APP.

final PackageManager packageManager = _context.getPackageManager();
List<ApplicationInfo> installedApplications = 
    packageManager.getInstalledApplications(PackageManager.GET_META_DATA);

for (ApplicationInfo appInfo : installedApplications)
{
    if ((appInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0)
    {
        // IS A SYSTEM APP
    }

    if ((appInfo.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0)
    {
        // APP WAS INSTALL AS AN UPDATE TO A BUILD-IN SYSTEM APP
    }
}
3 голосов
/ 28 марта 2012

Если я выполняю 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)
2 голосов
/ 16 августа 2016

Николай ответ правильный, но его можно оптимизировать с помощью итератора.Вот что я придумал:

/**
 * Return list of installed user applications
 */
static List<ApplicationInfo> getUserInstalledApplications(Context context) {
    // Get installed applications
    final PackageManager packageManager = context.getPackageManager();
    List<ApplicationInfo> installedApplications =
            packageManager.getInstalledApplications(PackageManager.GET_META_DATA);

    // Remove system apps
    Iterator<ApplicationInfo> it = installedApplications.iterator();
    while (it.hasNext()) {
        ApplicationInfo appInfo = it.next();
        if ((appInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0) {
            it.remove();
        }
    }

    // Return installed applications
    return installedApplications;
}
1 голос
/ 05 января 2011
final Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);
mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);
final List pkgAppsList = context.getPackageManager().queryIntentActivities( mainIntent, 0);
0 голосов
/ 09 июня 2018

Класс 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 (частично установленные приложения с каталогом данных).

Полная информация здесь.

Еще один хороший читайте здесь.

0 голосов
/ 12 февраля 2015

пользователь

  1. pkgAppsList.get(i).activityInfo.packageName для получения packageName
  2. pkgAppsList.get(i).activityInfo.applicationInfo.loadLabel(getPackageManager()).toString() до fetch app level name
...