2010-12-16 36 views
3

我必须确定我的设备上安装的应用程序使用的每个权限的列表。确定安装的应用程序在Android中使用的权限列表

我有安装的应用程序列表,使用下面的代码有包名称:

PackageManager pm = this.getPackageManager(); 
Intent intent = new Intent(Intent.ACTION_MAIN, null); 
intent.addCategory(Intent.CATEGORY_LAUNCHER); 

List<ResolveInfo> list = m.queryIntentActivities(intent,PackageManager.PERMISSION_GRANTED); 

    for (ResolveInfo rInfo : list) { 
    Log.d("Installed Applications", rInfo.activityInfo.applicationInfo 
    .loadLabel(pm).toString()); 
    Log.d("packegename",rInfo.activityInfo.applicationInfo.packageName. 
      toString()); 
    } 

我如何使用每个应用程序的权限?

回答

1

退房freetaskmanager

 // Loop through all installed packaged to get a list of used permissions and PackageInfos 
    for (PackageInfo pi : appList) {    
     // Do not add System Packages 
     if ((pi.requestedPermissions == null || pi.packageName.equals("android")) || 
       (pi.applicationInfo != null && (pi.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0)) 
      continue; 


     for (String permission : pi.requestedPermissions) { 
      Map<String, String> curChildMap = new HashMap<String, String>(); 
      try { 
       PermissionInfo pinfo = mPm.getPermissionInfo(permission, PackageManager.GET_META_DATA); 
       CharSequence label = pinfo.loadLabel(mPm); 
       CharSequence desc = pinfo.loadDescription(mPm); 
      } catch (NameNotFoundException e) { 
       Log.i(TAG, "Ignoring unknown permission " + permission); 
       continue; 
      } 
     } 
    } 
0

这是我发现的唯一的东西,虽然我没有测试过它。

让我知道,如果它可以用于任何一个:

pm.getPackageInfo(rInfo.activityInfo.applicationInfo.packageName, packageManager.GET_PERMISSIONS); 
8

所以我编码它。我需要的不仅仅是权限,但也recievers和services.pls请看下面的代码,希望其可用于其他。

PackageManager p = this.getPackageManager(); 
    final List <PackageInfo> appinstall=p.getInstalledPackages(PackageManager.GET_PERMISSIONS|PackageManager.GET_RECEIVERS| 
     PackageManager.GET_SERVICES|PackageManager.GET_PROVIDERS); 

    for(PackageInfo pInfo:appinstall){ 
     //PermissionInfo[] permission=pInfo.permissions; 
     String[] reqPermission=pInfo.requestedPermissions; 
     ServiceInfo[] services=pInfo.services; 
     ProviderInfo[] providers=pInfo.providers; 

    int versionCode=pInfo.versionCode; 
    Log.d("versionCode-package ",Integer.toString(versionCode)); 
    Log.d("Installed Applications", pInfo.applicationInfo 
      .loadLabel(pm).toString()); 
    Log.d("packegename",pInfo.packageName. 
      toString()); 
    if(reqPermission!=null) 
    for(int i=0;i<reqPermission.length;i++) 
     Log.d("permission list",reqPermission[i]); 

}

注意,设置标志是很重要的,否则它会导致问题NU CNT得到服务,提供 笔记记录NULL检查IMP或散发NPE

还前面的代码我写WS使用activityInfo这一个使用packageInfo现在.IT更好的我猜:) 编码快乐PPL :)

2

此处如何检索安装在Android设备上的应用程序列表以及每个应用程序使用的权限。

private static final String TAG = "MyActivity"; 
... 

final PackageManager pm = getPackageManager(); 
final List<ApplicationInfo> installedApps = pm.getInstalledApplications(PackageManager.GET_META_DATA); 

for (ApplicationInfo app : installedApps) { 
    //Details: 
    Log.d(TAG, "Package: " + app.packageName); 
    Log.d(TAG, "UID: " + app.uid); 
    Log.d(TAG, "Directory: " + app.sourceDir); 

    //Permissions: 
    StringBuffer permissions = new StringBuffer(); 

    try { 
     PackageInfo packageInfo = pm.getPackageInfo(app.packageName, PackageManager.GET_PERMISSIONS); 

     String[] requestedPermissions = packageInfo.requestedPermissions; 
     if (requestedPermissions != null) { 
      for (int i = 0; i < requestedPermissions.length; i++) { 
       permissions.append(requestedPermissions[i] + "\n"); 
      } 

      Log.d(TAG, "Permissions: " + permissions); 
     } 
    } 
    catch (PackageManager.NameNotFoundException e) { 
     e.printStackTrace(); 
    } 
} 
+0

谢谢兄弟,这对我很有用 – vuhung3990 2014-04-05 09:42:13

相关问题