Я знаю, что у Android 6.0 есть новые разрешения, и я знаю, что могу вызывать их примерно так
if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) !=
PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this,
new String[] {
Manifest.permission.WRITE_EXTERNAL_STORAGE
}, PERMISSION_WRITE_STORAGE);
}
Сегодня я увидел приложение Google, которому нужно 3 разрешения: контакты, смс и камера. Это делает страницу 1-3 и вызывает их всех вместе, чтобы активировать.
Кто-нибудь может сказать мне, как я могу вызвать 4 разрешения для активации одновременно, как смс, камера, контакты и память?
Пример (забыл название приложения google :()
Приложению нужны смс, контакты и камера
приложение попросило меня (и сделал диалог стр. 1-3) активировать смс, активировать контакты, а затем камеру. Так что это приложение Google вызывало все 3 необходимых разрешения вместе, и мой вопрос: как я могу добиться того же?
Ответы:
Просто включите все 4 разрешения в
ActivityCompat.requestPermissions(...)
вызов, и Android автоматически объединит их, как вы упомянули.У меня есть вспомогательный метод, чтобы проверить несколько разрешений и посмотреть, не предоставлены ли какие-либо из них.
Или в Котлине:
Затем просто отправьте все разрешения. Android будет запрашивать только те, которые ему нужны.
источник
Вот подробный пример с несколькими запросами на разрешение:
При запуске приложению необходимо 2 разрешения. SEND_SMS и ACCESS_FINE_LOCATION (оба упомянуты в manifest.xml).
Я использую библиотеку поддержки v4, которая подготовлена для обработки Android перед зефиром, поэтому нет необходимости проверять версии сборки.
Как только приложение запускается, оно запрашивает несколько разрешений вместе. Если оба разрешения предоставлены, нормальный поток идет.
ContextCompat.checkSelfPermission (), ActivityCompat.requestPermissions (), ActivityCompat.shouldShowRequestPermissionRationale () являются частью библиотеки поддержки.
В случае, если одно или несколько разрешений не предоставлены, ActivityCompat.requestPermissions () будет запрашивать разрешения, и элемент управления переходит к методу обратного вызова onRequestPermissionsResult ().
Вы должны проверить значение флага shouldShowRequestPermissionRationale () в методе обратного вызова onRequestPermissionsResult ().
Есть только два случая:
Случай 1: - Каждый раз, когда пользователь нажимает кнопку «Запретить» (включая самый первый раз), он возвращает значение «истина». Поэтому, когда пользователь отказывает, мы можем показать больше объяснений и продолжать спрашивать снова
Случай 2: -Только если пользователь выберет «никогда больше не спрашивать», он вернет false. В этом случае мы можем продолжить работу с ограниченными функциональными возможностями и направлять пользователя для активации разрешений из настроек для получения дополнительных функциональных возможностей, или мы можем завершить настройку, если разрешения для приложения тривиальны.
СЛУЧАЙ 1
ПРИМЕР 2-
источник
Маленький код:
Список разрешений Android нормальных разрешений и опасных разрешений в API 23
источник
}
источник
Это легко, делай так
В вашем onCreate
Тогда проверь результат
источник
Мой подход основан на ответе Никса и, надеюсь, будет более пригоден для нескольких (столько, сколько необходимо, а не только двух) разрешений. Предлагается добавить класс PermissionsHelper с единственной ответственностью:
}
Если пользователь не предоставил одно или несколько необходимых разрешений, ему будет показано подробное сообщение AlertDialog.
Пример использования в Activity:
Надеюсь, что это будет кому-то полезно.
источник
Мой класс обработчика для запроса нескольких разрешений. Вы можете проверить полное использование здесь
источник
Следующая методология о
Создайте «статический» класс для методов разрешений
В MainActivity.java
источник
Перейдите по этой ссылке для полного понимания нескольких разрешений, а также полной загрузки исходного кода, нажмите здесь
источник
Проверка каждой ситуации
если отказано - показывать пользователю диалог с предупреждением, зачем нам нужно разрешение
Проверка результатов разрешения
источник
В ответах, запрашивающих несколько разрешений, нет ничего плохого, но код результата с несколькими разрешениями реализован не очень элегантно и может привести к проверке неверного результата разрешения.
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED)
это ужасная логика для проверки результатов нескольких разрешений, я не знаю, почему Google реализовал такой ужасный код.Это беспорядок, особенно когда вы проверяете несколько разрешений. Допустим, вы просите
CAMERA
,ACCESS_FINE_LOCATION
иACCESS_NETWORK_STATE
.Вам нужно проверить,
ACCESS_FINE_LOCATION
но пользователь получил разрешение толькоCAMERA
при первом запуске,grantResults[1]
а при втором запускеACCESS_FINE_LOCATION
- разрешение с индексом 0. У меня так много проблем, когда пользователь не предоставляет все разрешения сразу, и мне приходится писать такую бессмысленную логику результата разрешения.Вы должны либо использовать
Или проще
в
onPermissionRequestResult
методе.источник
Увидев все длинные и сложные ответы. Я хочу опубликовать этот ответ.
RxPermission - широко используемая библиотека для запроса разрешения в однострочном коде.
добавить в свой
build.gradle
Разве это не легко?
источник
Я успешно реализовал простой код для нескольких разрешений за один раз. Выполните следующие шаги 1: Создайте класс Utility.java, как показано ниже
2: теперь звоните
в вашей деятельности onCreate () или в соответствии с вашей логикой.
3: Теперь проверьте разрешение перед выполнением операции для конкретной задачи
4: Теперь реализуйте метод onRequestPermissionsResult () в вашей деятельности, как показано ниже
источник
Коротко и сладко :). во что я верю
источник
источник
Вы можете использовать Декстер
В
build.gradle
добавлении:И используйте это в своей деятельности как:
источник
Я обнаружил, что это в примере разрешений во время выполнения от github от Google.
источник
Проверьте раздел «Запрашивать несколько разрешений одновременно» в этой статье:
Что нужно знать о разрешениях Android M
Это очень хорошо объяснено, а также может затронуть другие связанные темы, о которых вы даже не задумывались.
источник
Используйте помощник, как это (имена разрешений не имеют значения).
}
источник
Простой способ задать несколько разрешений,
https://github.com/sachinvarma/EasyPermission
Как добавить:
Как спросить разрешения:
Для более подробной информации ->
https://github.com/sachinvarma/EasyPermission/blob/master/app/src/main/java/com/sachinvarma/easypermissionsample/MainActivity.java
Это может помочь кому-то в будущем.
источник
В Котлине:
источник
Это то, что я сделал в своей деятельности. Надеюсь будет полезно. Я прошу разрешения для камеры и микрофона.
источник