2011-12-26 10 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)"メソッドはないようですが、 ) "メソッド(おそらく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

関連する問題