Stack Overflow archive
3 score

Android M get all dangerous permissions listed in the manifest

score
3
question views
658
license
CC BY-SA 3.0

As CommonsWare pointed out in the comments, it would be better to use a static String[] of all the dangerous permissions than get a list of them using PackageManager. You can use the following method to get a list of dangerous permissions of your app or any app:

java
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;
}

Example usage:

java
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();
}

Output:

java
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

Originally posted on Stack Overflow. Public user contributions are licensed under Creative Commons Attribution-ShareAlike.