【问题标题】:Filter out non-launchable apps when getting all installed apps获取所有已安装的应用程序时过滤掉不可启动的应用程序
【发布时间】:2012-09-23 11:00:45
【问题描述】:

我正在开发一个应用程序,我想向用户展示所有已安装的应用程序,让他/她选择一个,然后用它做一些事情。我遵循了一个教程(这个:http://impressive-artworx.de/2011/list-all-installed-apps-in-style/)虽然我遇到了一些问题。遵循教程后,我只获得了未预装的应用程序(如所有无法启动的后台应用程序),如果您想要用户从 Play 商店下载的应用程序,这非常有用。问题是在我的应用程序中,我想显示可启动的系统应用程序,如 Youtube 和浏览器,而不是不可启动的系统应用程序,如 Search Application Provider。

这是我在获取应用程序时使用的代码:

private List<App> loadInstalledApps(boolean includeSysApps) {
  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;

     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);
  }
  return apps;
  }

现在我的问题是;过滤掉无法启动的应用程序的最佳方法是什么?

感谢任何帮助!

【问题讨论】:

    标签: android get launch


    【解决方案1】:

    最好的办法是:

    public static List<ApplicationInfo> getAllInstalledApplications(Context context) {
        List<ApplicationInfo> installedApps = context.getPackageManager().getInstalledApplications(PackageManager.PERMISSION_GRANTED);
        List<ApplicationInfo> launchableInstalledApps = new ArrayList<ApplicationInfo>();
        for(int i =0; i<installedApps.size(); i++){
            if(context.getPackageManager().getLaunchIntentForPackage(installedApps.get(i).packageName) != null){
                //If you're here, then this is a launch-able app
                launchableInstalledApps.add(installedApps.get(i));
            }
        }
        return launchableInstalledApps;
    }
    

    【讨论】:

    • 这不是一个好主意,因为某些应用程序为 getLaunchIntentForPackageName 返回 null。使用此解决方案,我遇到了“电话”应用程序不在应用程序列表中的问题。如需更好的解决方案,请查看此处:stackoverflow.com/a/30446616/4274651
    猜你喜欢
    • 2019-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-30
    相关资源
    最近更新 更多