如何从所有已安装的应用程序中过滤非系统应用程序

Piy*_*hra 1 android

我有以下代码,它可以很好地获取安装在android中的所有应用程序的详细信息但是当我使用isSystemPackage(ResolveInfo)使用过滤器时,它会强制关闭.

try {
    lView = (ListView) findViewById(R.id.list1);

    PackageManager pm = this.getPackageManager();

    Intent intent = new Intent(Intent.ACTION_MAIN, null);
    intent.addCategory(Intent.CATEGORY_LAUNCHER);
    {
        List<ResolveInfo> list = pm.queryIntentActivities(intent, PackageManager.PERMISSION_GRANTED);
        for (ResolveInfo rInfo : list) {
            if (isSystemPackage(rInfo)) {
                results.add(rInfo.activityInfo.applicationInfo.loadLabel(pm).toString());
                Log.w("Installed Applications", rInfo.activityInfo.applicationInfo
                        .loadLabel(pm).toString());
            }

        }
    }
} catch(Exception ex) {
    Toast.makeText(getApplicationContext(), ex.toString(), 4000).show();
}
Run Code Online (Sandbox Code Playgroud)

它会产生力量关闭

isSystemPackage()代码是

private boolean isSystemPackage(ResolveInfo ri){
    return ((ri.activityInfo.applicationInfo.flags&ApplicationInfo.FLAG_SYSTEM)!=0)?   
       true:false;
}
Run Code Online (Sandbox Code Playgroud)

我试图调试它但无法做到.

Piy*_*hra 8

得到了我的答案,这是其他人使用此代码.

 List<ApplicationInfo> list = getPackageManager().getInstalledApplications(PackageManager.GET_UNINSTALLED_PACKAGES);
      for (int n=0;n<list.size();n++) {
          if((list.get(n).flags & ApplicationInfo.FLAG_SYSTEM)!=1)
          {
       results.add(list.get(n).loadLabel(pm).toString());
       Log.w("Installed Applications", list.get(n).loadLabel(pm).toString());
          }

      }
Run Code Online (Sandbox Code Playgroud)

欢呼:)

  • 我有两个有用的答案.请查看http://stackoverflow.com/questions/4181699/how-to-launch-the-third-party-android-applications-i-installed-through-intent-dir/4182357#4182357以及http:// stackoverflow .COM /问题/ 3750380/Android的列表视图与 - 删除按钮/ 3750594#3750594.应该有你需要的一切.干杯. (2认同)