如何在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); 

  • 在android studio中无法解析谷歌集成的符号'Auth'
  • 不推荐使用PlacePicker.getPlace()
  • android sdk和avd manager无法在Windows 7 x64上启动
  • Android:如何将监听器添加到硬件菜单按钮?
  • Android Studio:java.io.IOException:远程主机强行关闭现有连接
  • ClickableSpan的onClick()不适用于URLSpan?
  • 是否有任何方法使Snackbar在活动变化中持续存在?
  • 自定义片段(NPE)内的Android Maps V2 MapView
  •  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(); }