2016-02-11 3 views
7

Я пытаюсь проверить, разрешены или отменены разрешения пользователей в Android Marshmallow. К сожалению, ContextCompat.checkSelfPermission() (который является warpper около Context.checkCallingOrSelfPermission), кажется, всегда возвращает PackageManager.PERMISSION_GRANTED (0), если вы включили это конкретное разрешение в манифест, независимо от текущего состояния разрешения (например, если пользователь отменил это разрешение). Я также пробовал someContext.checkCallingOrSelfPermission(), но результат тот же.Android ContextCompat.checkSelfPermission() возвращает неверное значение

Кто-нибудь испытал это? Я использую Android Marshmallow на консоли nVidia Shield (используя бета-версию nVidia).

+2

Что такое 'targetSdkVersion'? – CommonsWare

+0

@CommonsWare Да, вы точно определили проблему! Я объясню в ответ. – Metallica

ответ

9

Как оказалось, TargetSdkVersion в манифесте должен быть 23, мне было 22. Если ваш целевой SDK равен 23 (Android 6), все разрешения (в вашем манифесте) по умолчанию отключены, тогда как если ваш целевой SDK - 22 (Android 5.1), а ваше приложение работает на Android 6, все разрешения включены по умолчанию, когда пользователь устанавливает приложение, и даже если пользователь отменяет права доступа позже, упомянутый API возвращает неправильное значение (что является ошибкой, на мой взгляд).

+4

Вы также можете использовать 'PermissionChecker', который должен сообщить вам, отказал ли пользователь в группе разрешений через Настройки: http://developer.android.com/reference/android/support/v4/content/PermissionChecker.html – CommonsWare

+1

Та же проблема с целевой 22 и работает на Android 6.0. – einverne

Смежные вопросы