2011-12-26 110 views

回答

1

从字面上看,我相信这个问题是关于如何简单地获取可能的权限,而不是在一个包运行时的权限列表。假设这是真的,这只是一个反思问题。

你会做这样的事情(不编译):

List<Field> permissionFields = new ArrayList<Field>(); 
Field[] fields = Manifest.permission.class.getDeclaredFields(); 
for (Field declField : fields) { 
    if ((declField.getType() == String.class) && Modifier.isFinal(declField.getModifiers())) { 
    permissionFields.add(declField); 
    } 
} 

的“permissionFields”列表认为是允许值的对象列表。您可以使用“Field.getObject(obj)”方法来获取字符串值(好奇的是,似乎并没有出现“Field.getString(obj)”方法,尽管还有其他几个“Field.get(obj) )“方法(可能是因为String不是原语))。

+0

正是我需要的。谢谢! – Phil 2011-12-27 02:34:04

0

下面是代码:

Log.d(TAG, "Getting permissions for " + packageName); 
try { 
    PackageInfo pkgInfo = getPackageManager().getPackageInfo(
       packageName, 
       PackageManager.GET_PERMISSIONS 
      ); 
    PermissionInfo[] permissions = pkgInfo.permissions; 
    if (permissions == null) { 
    permissionsField.setText("No declared permissions"); 
    } 
    else { 
    String permissionsText = ""; 
    for (int i = 0; i < permissions.length; i++) { 
     switch (permissions[i].protectionLevel) { 
      case 0: 
       permissionsText += permissions[i].name + ":::" + "NORMAL" + "\n"; 
       break; 
      case 1: 
       permissionsText += permissions[i].name + ":::" + "DANGEROUS" + "\n"; 
       break; 
      case 2: 
       permissionsText += permissions[i].name + ":::" + "SIGNATURE" + "\n"; 
       break; 
      case 3: 
       permissionsText += permissions[i].name + ":::" + "SIGNATUREORSYSTEM" + "\n"; 
       break; 
     } 
    } 
    permissionsField.setText(permissionsText); 
    } 

    String[] requestedPermissions = pkgInfo.requestedPermissions; 
    if (requestedPermissions == null) { 
    requestedPermissionsField.setText("No requested permissions"); 
    } 
    else { 
    String reqPermText = ""; 
    for (int i = 0; i < requestedPermissions.length; i++) { 
     reqPermText += requestedPermissions[i] + "\n"; 
    } 
    requestedPermissionsField.setText(reqPermText); 
    } 
} 
catch (PackageManager.NameNotFoundException e) { 
    permissionsField.setText("Package Not Found"); 
    requestedPermissionsField.setText("Package Not Found"); 
} 
+0

请更好地阅读问题。如果是我所要求的,这将是一个很好的回应。 – Phil 2011-12-27 02:35:37