Подтвердить что ты не робот

Разрешение 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 и объясняет, что мне нужно, чтобы получить учетную запись устройства.

4b9b3361

Ответ 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