Android getInstalledPackages

时间:2013-07-19 15:22:10

标签: android

我正在创建一个Android应用程序,其中包含用户可以从其Android手机菜单访问的所有应用程序列表。 这是我的代码,它正在成功运作..

List<App> apps = new ArrayList<App>();

          // the package manager contains the information about all installed apps
          PackageManager packageManager = getPackageManager();

          List<PackageInfo> packs = packageManager.getInstalledPackages(0); //PackageManager.GET_META_DATA 

          for(int i=0; i < packs.size(); i++) {
             PackageInfo p = packs.get(i);
             ApplicationInfo a = p.applicationInfo;
             // skip system apps if they shall not be included
             if ((!includeSysApps) && ((a.flags & ApplicationInfo.FLAG_SYSTEM) == 1)) {
                continue;
             }
             App app = new App();
             app.setTitle(p.applicationInfo.loadLabel(packageManager).toString());
             app.setPackageName(p.packageName);
             app.setVersionName(p.versionName);
             app.setVersionCode(p.versionCode);
             CharSequence description = p.applicationInfo.loadDescription(packageManager);
             app.setDescription(description != null ? description.toString() : "");
             apps.add(app);
          }

现在这给了我一个大清单,我可以用3种方式对其项目进行分类:

1st(类似的应用程序):Speed Moto,Subway Surf,Chrome(我已安装)

2nd(类似应用):相机,电子邮件,消息(默认安装)

3rd(....赞):PageBuddyNotiSvc,Dialer Storage等(部分套餐)

现在我想过滤第三类应用,并希望只保留第一和第二类型.. 我怎样才能实现这个清单..

1 个答案:

答案 0 :(得分:1)

您可以使用以下代码获取有关每个应用程序的信息

ApplicationInfo app = context.getPackageManager().getApplicationInfo(packageName, 0);
//And then check the  dir

if (app.sourceDir.startsWith("/data/app/")) {
    //Non-system app
}
else {
    //System app
}