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

时间:2011-04-01 14:19:15

标签: android

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

我可以使用下面的代码获取应用程序列表,但我只想要第三方应用程序。

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

5 个答案:

答案 0 :(得分:7)

    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
       }
    }

答案 1 :(得分:7)

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
    }
}

答案 2 :(得分:2)

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

答案 3 :(得分:2)

@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的回答。

答案 4 :(得分:0)

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;
    }