Как получить список приложений, которые были установлены пользователем на устройстве Android?
Вопрос
В данный момент я использую следующий фрагмент кода:
List<PackageInfo> packs = getPackageManager().getInstalledPackages(0);
но он возвращает приложения, которые были установлены как производителем устройства, так и мной.Как ограничить это, чтобы возвращались только те приложения, которые я установил?
Решение
// 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
}
}
Флаги:
Другие советы
Ответ Зелимира верен. Но в некоторых случаях это не даст вам всех установленных сторонних приложений. 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
}
}
Если я выполняю 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)
Ответ Николая правильный, но может быть оптимизирован с помощью итератора. Это то, что я придумал:
/**
* 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;
}
final Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);
mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);
final List pkgAppsList = context.getPackageManager().queryIntentActivities( mainIntent, 0);
пользователь
pkgAppsList.get(i).activityInfo.packageName
чтобы принестиpackageName
pkgAppsList.get(i).activityInfo.applicationInfo.loadLabel(getPackageManager()).toString()
кfetch app level name
Android Packagemanager Class используется для получения информации в пакетах приложений, которые в настоящее время установлены на устройстве. Вы можете получить экземпляр класса PackageManager, позвонив в GetPackAgeManager (). PackageManager предоставляет методы запроса и манипулирования установленными пакетами и связанными с ними разрешениями и т. Д. В этом примере Android мы получаем список установленных приложений в Android.
Packagemanager packagemanager = getpackagemanager (); Список списка = packageManager.getInstalledApplications (packagemanager.get_meta_data)
packageManager.getInstalledApplications () Возвращает список всех пакетов приложений, которые установлены на устройстве. Если мы установим флаг get_uninstalled_packages, будет установлен список всех приложений, включая те, которые удалены с помощью DONT_DELETE_DATA (частично установленных приложений с каталогом данных).
Полная информация здесь.
Еще один хороший Читайте здесь.