Как получить все предоставленные разрешения приложения

Я хочу получить все предоставленные разрешения. Я знаю, что могу получить все запрашиваемые разрешения packageinfo.requestedPermissions, но я хочу знать список предоставленных разрешений и предоставленные разрешения могут быть менее запрошенными в случае android M. Поэтому я просто хотел знать, что есть способ, которым я могу получить список Всех предоставленных разрешений?

Я знаю из списка запрошенных разрешений. Я могу проверить, предоставлено разрешение или нет, но я хочу узнать список всех разрешенных прав. Не хотите проверять каждое запрашиваемое разрешение.

Простая функция, которая возвращает все разрешения, которые были запрошены и предоставлены для данного пакета, может выглядеть так:

 List<String> getGrantedPermissions(final String appPackage) { List<String> granted = new ArrayList<String>(); try { PackageInfo pi = getPackageManager().getPackageInfo(appPackage, PackageManager.GET_PERMISSIONS); for (int i = 0; i < pi.requestedPermissions.length; i++) { if ((pi.requestedPermissionsFlags[i] & PackageInfo.REQUESTED_PERMISSION_GRANTED) != 0) { granted.add(pi.requestedPermissions[i]); } } } catch (Exception e) { } return granted; } 

Обратите внимание, что для этого требуется уровень API 16 или выше, но в наши дни он, надеюсь, не будет проблемой.

Вы пробовали это? Для этого вам нужно перебирать массив

 boolean permissionGranted = PermissionChecker.checkSelfPermission(MyActivity.this, android.Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED; 

Существует также способ получения необходимых парм, как показано ниже:

 private static String[] PERMISSIONS = { android.Manifest.permission.READ_EXTERNAL_STORAGE, android.Manifest.permission.WRITE_EXTERNAL_STORAGE }; ActivityCompat.requestPermissions( MyActivity.this, PERMISSIONS, REQUEST_EXTERNAL_STORAGE ); public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { switch (requestCode) { case REQUEST_EXTERNAL_STORAGE: { // If request is cancelled, the result arrays are empty. if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { //handle } } } } 

Просто упакуйте все свои разрешения в массив PERMISSIONS , но имейте в виду, что в версии 6.0+ это приведет к появлению некоторого системного диалога

Вы можете проверить разрешение один за другим и добавить в список:

// Должны ли мы показать объяснение?

  List<String> listPermissionsNeeded = new ArrayList<>(); // No explanation needed, we can request the permission. if((ContextCompat.checkSelfPermission(context, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED)) { listPermissionsNeeded.add(Manifest.permission.WRITE_EXTERNAL_STORAGE); } if((ContextCompat.checkSelfPermission(context, Manifest.permission.GET_ACCOUNTS) != PackageManager.PERMISSION_GRANTED)) { listPermissionsNeeded.add(Manifest.permission.GET_ACCOUNTS); } if((ContextCompat.checkSelfPermission(context, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED)) { listPermissionsNeeded.add(Manifest.permission.ACCESS_COARSE_LOCATION); } if((ContextCompat.checkSelfPermission(context, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED)) { listPermissionsNeeded.add(Manifest.permission.ACCESS_FINE_LOCATION); } if((ContextCompat.checkSelfPermission(context, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED)) { listPermissionsNeeded.add(Manifest.permission.READ_PHONE_STATE); } if (!listPermissionsNeeded.isEmpty()) { ActivityCompat.requestPermissions(context, listPermissionsNeeded.toArray(new String[listPermissionsNeeded.size()]), MY_PERMISSIONS_REQUEST_MULTIPLE_PERMISSION); }