Есть ли способ проверить наличие явного разрешения в коде? - PullRequest
15 голосов
/ 28 ноября 2011

Как проверить наличие определенного разрешения в файле manifest.xml из кода?Я хочу выдать какое-то исключение, если некоторые разрешения, необходимые для моего приложения, отсутствуют.

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

Любые предложения будут полезны.

Ответы [ 2 ]

33 голосов
/ 28 ноября 2011

Вы можете проверить, предоставлено ли разрешение для конкретного разрешения, используя PackageManager .Например

    PackageManager pm = getPackageManager();
    if (pm.checkPermission(permission.FINE_LOCATION, getPackageName()) == PackageManager.PERMISSION_GRANTED) {
        // do something
    } else {
        // do something
    }
8 голосов
/ 03 ноября 2016

Вы можете прочитать доступные теги <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();
}
...