Есть ли способ проверить разрешение манифеста из кода?
Как проверить конкретное разрешение в файле manifest.xml из кода? Я хочу бросить какое-то исключение, если некоторые разрешения, необходимые для моего приложения, отсутствуют.
Например, FINE_LOCATION
и COARSE_LOCATION
Я знаю, что андроид также выдаст исключение при запуске определенной активности, использующей GPS, но мне нужно проверить манифест и бросить исключение при запуске самого приложения. Это относится не только к доступу к местоположению, но и к другим разрешениям.
Любые предложения были бы полезными.
Ответы
Ответ 1
Вы можете проверить, предоставлено ли разрешение или нет для конкретного разрешения, с помощью PackageManager. Например
PackageManager pm = getPackageManager();
if (pm.checkPermission(permission.FINE_LOCATION, getPackageName()) == PackageManager.PERMISSION_GRANTED) {
// do something
} else {
// do something
}
Ответ 2
Вы можете прочитать доступные теги <uses-permission>
во время выполнения, используя следующее. Протестировано на более ранних версиях Android и Android 6 и 7
PackageManager pm = getPackageManager();
try
{
PackageInfo packageInfo = pm.getPackageInfo(getPackageName(), PackageManager.GET_PERMISSIONS);
String[] requestedPermissions = null;
if (packageInfo != null) {
requestedPermissions = packageInfo.requestedPermissions;
}
if (requestedPermissions != null && requestedPermissions.length > 0)
{
List<String> requestedPermissionsList = Arrays.asList(requestedPermissions);
ArrayList<String> requestedPermissionsArrayList = new ArrayList<String>();
requestedPermissionsArrayList.addAll(requestedPermissionsList);
Log.i(ExConsts.TAG, ""+requestedPermissionsArrayList);
}
}
catch (PackageManager.NameNotFoundException e)
{
e.printStackTrace();
}