安装的应用程序是否是第三方

如何获取Android手机上安装的第三方应用程序的列表。

我能够得到下面的代码的应用程序列表,但我只想要第三方应用程序。

PackageManager pm = context.getPackageManager(); appInstalModel.setAppName(p.applicationInfo.loadLabel(context.getPackageManager()).toString()); appInstalModel.setAppPkg(p.packageName); appInstalModel.setAppVersionName(p.versionName); 

Related of "安装的应用程序是否是第三方"

  List<ApplicationInfo> apps = getPackageManager().getInstalledApplications(0); for (int i=0; i < apps.size(); i++) { if ((apps.get(i).flags & ApplicationInfo.FLAG_SYSTEM) == 1) { //System app } } 

RoflcoptrException的答案是正确的。 但在某些情况下,它不会为您提供所有安装的第三方应用程序。 ApplicationInfo也有标志FLAG_UPDATED_SYSTEM_APP被设置

如果此应用程序已作为内置系统应用程序的更新进行安装

在我的智能手机上,这样的应用包括Amazone Kindle,Adobe Reader,Slacker Radio等。 这些应用程序没有随电话一起提供,而是从Google Play商店安装的。 因此,他们可以被视为第三方应用程序。

所以,你可能也想检查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 } } 

ApplicationInfo对象将会取消设置FLAG_SYSTEM标志。 sdmove程序可能有一些示例代码。

@Roflcoptr答案的小变化。

 List<ApplicationInfo> apps = getPackageManager().getInstalledApplications(0); for (int i=0; i < apps.size(); i++) { if ((apps.get(i).applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) == 1) { //System app } } 

感谢@Roflcoptr为您的答案。

 public static List<PackageInfo> getInstalledAppList(Context context) { ArrayList<PackageInfo> packList = (ArrayList<PackageInfo>) context.getPackageManager().getInstalledPackages(0); showLog("/n/n ********************** App List ********************"); for (int i = 0; i < packList.size(); i++) { PackageInfo packInfo = packList.get(i); if ((packInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) == 0) { String appName = packInfo.applicationInfo.loadLabel(context.getPackageManager()).toString(); showLog(appName + "(" + packInfo.packageName + ")"); } else { packList.remove(i); i--; } } showLog("List Size : " + packList.size()); showLog("/n/n ********************** END ********************"); return packList; }