2012-10-23 73 views
3

我希望设备上安装的所有应用程序的列表使用像INTERNET这样的特定权限。获取具有特定权限的应用程序名称

我正在使用此代码,但无法检索结果,请帮助。

private ArrayList<String> getInstalledApps(Context context) { 
    ArrayList<String> results = new ArrayList<String>(); 
    PackageManager packageManager = context.getPackageManager(); 
    List<PackageInfo> applist = packageManager.getInstalledPackages(0); 
    Iterator<PackageInfo> it = applist.iterator(); 
    while (it.hasNext()) { 
     PackageInfo pk = (PackageInfo) it.next(); 
     if (PackageManager.PERMISSION_GRANTED == packageManager.checkPermission(Manifest.permission.INTERNET, pk.packageName)) 
      results.add("" + pk.applicationInfo.loadLabel(packageManager)); 
    } 

    for (int i = 0; i <= results.size(); i++) { 
     Log.v("app using internet = ", results.toString()); 
    } 

    return results; 
} 
+0

我只是在与模拟器的测试项目,它工作正常..你在模拟器上累了吗? Android正在使用哪个版本? –

+0

使用模拟器2.2 –

+0

我已经使用你的代码,它工作正常..你得到应用程序列表的空响应? –

回答

3

我试过在android 2.2模拟器上的代码,它工作正常。以下是工作代码:

private ArrayList<String> getInstalledApps(Context context) { 
     ArrayList<String> results = new ArrayList<String>(); 
     PackageManager packageManager = context.getPackageManager(); 
     List<PackageInfo> applist = packageManager.getInstalledPackages(0); 
     Iterator<PackageInfo> it = applist.iterator(); 
     while (it.hasNext()) { 
      PackageInfo pk = (PackageInfo) it.next(); 
      if ((pk.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0) { 
       Log.v("system app using internet = ", ""+pk.applicationInfo.loadLabel(packageManager)); 
       continue; 
      } 
      if (PackageManager.PERMISSION_GRANTED == packageManager 
        .checkPermission(Manifest.permission.INTERNET, 
          pk.packageName)) 
       results.add("" + pk.applicationInfo.loadLabel(packageManager)); 
     } 

     Log.v("app using internet = ", results.toString()); 

     return results; 
    } 
+0

谢谢:) 它也为我工作,在执行中犯了一个错误。 –

+0

是否可以从此列表中排除系统的默认应用程序? –

+0

很高兴我可以帮助...: - )... –

1

我有同样的情况,我解决它使用下面的检查

PackageInfo p = packs.get(i); 
ApplicationInfo a = p.applicationInfo; 
if (PackageManager.PERMISSION_GRANTED != pm.checkPermission(Manifest.permission.INTERNET, p.packageName)) { 
continue; 
} 

的包变量是类的阵列,它包含有关安装应用程序的信息,它由与信息对象目前安装在系统中的所有应用程序

相关问题