2016-11-24 17 views
2

私のアプリケーションが初めて実行されたときに必要なすべてのアクセス権をユーザに尋ねます。Android Mはマニフェストに記載されているすべての危険なアクセス許可を取得します

しかし、Dangerous Permissionsをコードにハードコードすることは望ましくありません。これは、コードの管理がずっと簡単ではないためです。

は、おそらく私はすでにCommonsWareはコメントで指摘したように、すべてのstatic String[]を使用する方が良いでしょうManifest.xml

+1

あなたが確かに歓迎されています'PackageManager'を使ってあなたのアプリケーションが要求するパーミッションを調べてください。私はあなたがそれらのどれが「危険な」ものであるかを見つけることもできると思います。これは保守的には、まれに変更されるべきではない静的String [静的String]よりも1〜2桁も複雑です。 – CommonsWare

答えて

3

に記載されている全ての危険な権限を照会してもらうことが可能な方法がありますPackageManagerを使用してそれらのリストを取得するよりも危険なアクセス許可。あなたのアプリまたはアプリの危険な権限の一覧を取得するには、次の方法を使用することができます。

public static List<PermissionInfo> getDangerousPermissions(Context context, String packageName) 
    throws PackageManager.NameNotFoundException { 
    List<PermissionInfo> dangerousPermissions = new ArrayList<>(); 
    PackageManager pm = context.getPackageManager(); 
    PackageInfo packageInfo = pm.getPackageInfo(packageName, PackageManager.GET_PERMISSIONS); 
    if (packageInfo.requestedPermissions != null) { 
    for (String requestedPermission : packageInfo.requestedPermissions) { 
     try { 
     PermissionInfo permissionInfo = pm.getPermissionInfo(requestedPermission, 0); 
     switch (permissionInfo.protectionLevel & PermissionInfo.PROTECTION_MASK_BASE) { 
      case PermissionInfo.PROTECTION_DANGEROUS: 
      dangerousPermissions.add(permissionInfo); 
      break; 
     } 
     } catch (PackageManager.NameNotFoundException ignored) { 
     // unknown permission 
     } 
    } 
    } 
    return dangerousPermissions; 
} 

使用例:

try { 
    List<PermissionInfo> dangerousPermissions = getDangerousPermissions(this, "com.android.chrome"); 
    System.out.println(String.format("%d dangerous permissions:", dangerousPermissions.size())); 
    for (PermissionInfo dangerousPermission : dangerousPermissions) { 
    System.out.println(dangerousPermission.name); 
    } 
} catch (PackageManager.NameNotFoundException e) { 
    e.printStackTrace(); 
} 

出力:

I/System.out: 7 dangerous permissions: 
I/System.out: android.permission.ACCESS_COARSE_LOCATION 
I/System.out: android.permission.ACCESS_FINE_LOCATION 
I/System.out: android.permission.CAMERA 
I/System.out: android.permission.GET_ACCOUNTS 
I/System.out: android.permission.RECORD_AUDIO 
I/System.out: android.permission.WRITE_EXTERNAL_STORAGE 
I/System.out: android.permission.READ_EXTERNAL_STORAGE 
関連する問題