Разрешение Android 6.0.GET_ACCOUNTS
Я использую это для получения разрешения:
if (ContextCompat.checkSelfPermission(context, Manifest.permission.GET_ACCOUNTS) != PackageManager.PERMISSION_GRANTED) {
// Should we show an explanation?
if (ActivityCompat.shouldShowRequestPermissionRationale(context, Manifest.permission.GET_ACCOUNTS)) {
} else {
// No explanation needed, we can request the permission.
ActivityCompat.requestPermissions(context, new String[]{Manifest.permission.GET_ACCOUNTS}, PERMISSIONS_REQUEST_GET_ACCOUNTS);
// MY_PERMISSIONS_REQUEST_READ_CONTACTS is an
// app-defined int constant. The callback method gets the
// result of the request.
}
}
Но всплывающее диалоговое окно для разрешения запрашивает у пользователя доступ к контактам!?!?
В режиме pre 6.0 в Play Маркете с
<uses-permission android:name="android.permission.GET_ACCOUNTS"/>
запрос называется Identity и объясняет, что мне нужно, чтобы получить учетную запись устройства.
Ответы
Ответ 1
Это из-за групп разрешений. В основном, разрешения размещаются под разными группами, и все разрешения от этой группы предоставляются, если один из них предоставляется.
Eg. В разделе "Контакты" есть контакты для записи/чтения и получения учетных записей, поэтому при запросе любого из них всплывающее окно запрашивает разрешения "Контакты".
Прочтите: Все, что должен сказать разработчик Android о новом разрешении Runtime для Android
ИЗМЕНИТЬ 1
Просто подумал, что я добавлю связанные (не для получения учетных записей, а разрешения и группы). Информация о обновлении Oreo:
источник: https://developer.android.com/about/versions/oreo/android-8.0-changes.html#rmp
До Android 8.0 (уровень API 26), если приложение запросило разрешение во время выполнения и разрешение было предоставлено, система также неправильно предоставило приложению остальные разрешения, принадлежащие одному и тому же группы разрешений и которые были зарегистрированы в манифесте.
Для приложений, ориентированных на Android 8.0, это поведение было исправлено. Приложение получает только разрешения, явно запрошенные. Однако, как только пользователь предоставляет разрешение на приложение, все последующие запросы на разрешения в этой группе разрешений автоматически само собой разумеющееся.
Ответ 2
GET_ACCOUNTS
был перемещен в группу разрешений CONTACTS
в Android 6.0. Хотя API предоставляет нам разрешения, пользователю (для Android 6.0 по крайней мере) предлагается группа разрешений. Следовательно, пользователю будет дано такое же приглашение для GET_ACCOUNTS
, как пользователь получит для READ_CONTACTS
или WRITE_CONTACTS
.
Ответ 3
К счастью, это изменится в Android N
http://developer.android.com/preview/behavior-changes.html#perm
Теперь разрешение GET_ACCOUNTS устарело. Система игнорирует это разрешение для приложений, нацеленных на Android N.
Ответ 4
Сначала у меня был ваш вопрос. На этой странице http://developer.android.com/guide/topics/security/permissions.html#perm-groups вы можете видеть, что GET_ACCOUNTS ссылается на контакты группы разрешений. Из-за этого вам предлагается разрешение на контакт.
Ответ 5
В Зефире все опасные разрешения принадлежат группам разрешений.
Разрешение android.permission.GET_ACCOUNTS
принадлежит CONTACTS group
Дополнительную информацию об опасном разрешении и их группах вы можете найти здесь:
https://developer.android.com/guide/topics/security/permissions.html#normal-dangerous