如何在Android中安装应用程序而没有系统应用程序?

我想获得菜单屏幕中显示的所有应用程序。 但是,现在我只获得用户安装的应用程序或所有应用程序(包括系统应用程序)。

我目前的代码是:

final PackageManager pm = getActivity().getPackageManager(); List apps = pm.getInstalledPackages(PackageManager.GET_META_DATA); ArrayList aux = new ArrayList(); for (int i = 0; i < apps.size(); i++) { if (apps.get(i).versionName != null && ((apps.get(i).applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 1)) { aux.add(apps.get(i)); } 

使用此代码,我可以获得用户安装的应用程序,如果我评论’if’指令,我将获得系统应用程序。

所以,我想让用户安装应用程序和应用程序,如联系人,图库等。

更新:

  final PackageManager pm = getActivity().getPackageManager(); Intent intent = new Intent(Intent.ACTION_MAIN, null); intent.addCategory(Intent.CATEGORY_LAUNCHER); List apps = pm.queryIntentActivities(intent, PackageManager.GET_META_DATA); 

Solutions Collecting From Web of "如何在Android中安装应用程序而没有系统应用程序?"

 final PackageManager pm = getPackageManager(); List packages = pm.getInstalledApplications(PackageManager.GET_META_DATA); 

使用PackageInfo:

 private boolean isSystemPackage(PackageInfo packageInfo) { return ((packageInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0); } 

使用ResolveInfo:

 private boolean isSystemPackage(ResolveInfo resolveInfo) { return ((resolveInfo.activityInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0); } 

使用ApplicationInfo:

 private boolean isSystemPackage(ApplicationInfo applicationInfo) { return ((applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0); } 

这会过滤系统包。 看到这个问题。 致谢:Nelson Ramirez和Kenneth Evans。

 final PackageManager pm = getActivity().getPackageManager(); Intent intent = new Intent(Intent.ACTION_MAIN, null); intent.addCategory(Intent.CATEGORY_LAUNCHER); List apps = pm.queryIntentActivities(intent, PackageManager.GET_META_DATA); 

我有同样的要求。 最后,我添加了另一个条件来过滤应用列表。 我刚检查了该应用是否具有’启动器意图’。

所以,结果代码看起来像……

 PackageManager pm = getPackageManager(); List apps = pm.getInstalledApplications(PackageManager.GET_GIDS); for (ApplicationInfo app : apps) { if(pm.getLaunchIntentForPackage(app.packageName) != null) { // apps with launcher intent if((app.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) == 1) { // updated system apps } else if ((app.flags & ApplicationInfo.FLAG_SYSTEM) == 1) { // system apps } else { // user installed apps } appsList.add(app); } } 

下面的代码将为您提供与操作系统相关的所有系统应用程序。 这不包括YouTube,Gmail等应用


 try { ApplicationInfo ai = getPackageManager().getApplicationInfo(item.packageName, 0); if ((ai.flags & ApplicationInfo.FLAG_SYSTEM ) != 0) { if((ai.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP ) == 0) { appItem.setSystemApp(true); Mylog.v("System Apps " + appItem.getAppName()); } } } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); }