2011-12-26 5 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) для получения значения String (любопытно, что не существует метода «Field.getString (obj)», хотя есть несколько других «Field.get (obj) "(возможно, потому, что String не является примитивным)).

+0

То, что мне нужно. Благодаря! – Phil

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

Смежные вопросы