Запрос нескольких разрешений в Android 6.0: шаг за шагом
Быстрый ответ
Чтобы надлежащим образом управлять разрешениями в Android Marshmallow (API 23), воспользуйтесь методом ActivityCompat.requestPermissions
. Составьте массив требуемых разрешений, проверьте, что каждое из них предоставлено с помощью ContextCompat.checkSelfPermission
, и запросите те, которые не были утверждены. В обработчике onRequestPermissionsResult
убедитесь, что все запрошенные разрешения были предоставлены. Пример кода на Java приведён ниже:
public static final int REQUEST_CODE = 420;
public void checkAndRequestPermissions() {
String[] permissionsRequired = {
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.CAMERA
};
List<String> permissionsToRequest = new ArrayList<>();
for (String permission : permissionsRequired) {
if (ContextCompat.checkSelfPermission(this, permission) != PackageManager.PERMISSION_GRANTED) {
permissionsToRequest.add(permission);
}
}
if (!permissionsToRequest.isEmpty()) {
ActivityCompat.requestPermissions(this, permissionsToRequest.toArray(new String[0]), REQUEST_CODE);
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
if (requestCode == REQUEST_CODE) {
if (allPermissionsGranted(grantResults)) {
// Мы получили все необходимые разрешения, можно продолжать работу.
} else {
// Внимание: некоторые разрешения остались непринятыми.
}
}
}
private boolean allPermissionsGranted(int[] grantResults) {
for (int result : grantResults) {
if (result != PackageManager.PERMISSION_GRANTED) {
return false;
}
}
return true;
}
Этот сценарий помогает эффективно работать с разрешениями.
Реализация разрешений: лучшие практики
При работе с запросами разрешений руководствуйтесь следующими рекомендациями:
- Информируйте пользователя: перед запросом разрешения объясните, почему оно необходимо с помощью
shouldShowRequestPermissionRationale()
. - Реагируйте на отказы: Если пользователь отказал в предоставлении разрешения, предложите ему пересмотреть настройки приложения.
- Объявляйте необходимые разрешения: Указывайте требуемые разрешения в секции
manifest.permission
в вашем AndroidManifest.xml. - Ограничивайте количество запросов: Запрашивайте только те разрешения, которые действительно важны для вашего приложения.
- Запрашивайте разрешения группами: Скомбинируйте запросы разрешений, чтобы минимизировать неудобства для пользователя.
- Разделяйте логику разрешений: В
onRequestPermissionsResult()
контролируйте каждое разрешение отдельно для увеличения надёжности процесса.
Визуализация
Вот как система Android 6.0 управляет запросами разрешений:
📚 ЗАПРОС РАЗРЕШЕНИЯ: "Прошу предоставить доступ к ресурсам."
Каждое разрешение относится к определённому ресурсу:
🔑 Разрешения:
- 📷 Доступ к камере
- 📒 Доступ к контактам
- 📍 Геолокация
- 🎤 Использование микрофона
- 📁 Доступ к файловой системе
Система Android проверяет, были ли предоставлены разрешения:
| Ресурс | Предоставлено разрешение? |
|--------------|----------------------|
| 📷 Камера | ✅ |
| 📒 Контакты | ❌ |
| 📍 Геолокация| ✅ |
| 🎤 Микрофон | ❌ |
| 📁 Файлы | ✅ |
Каждое разрешение обрабатывается по отдельности:
- Каждое разрешение: предоставлено (✅) или отклонено (❌)
- Без разрешения доступ запрещён (🚫)
Персональная информация должна быть уважаема при работе с обработкой разрешений.
Учёт мелких деталей
Для комфортного взаимодействия с пользователем:
- Оставляйте интервалы между запросами: Не нагружайте пользователя частыми запросами разрешений.
- Давайте краткие объяснения: Используйте понятный язык при пояснении причин запросов.
- Будьте прозрачны: Ясно указывайте, зачем приложению нужно каждое разрешение.
- Предоставляйте дополнительные сведения: Опытным пользователям может быть полезно получить подробную информацию или ссылки для самостоятельного изучения.
Балансировка на грани
Грамотное управление разрешениями требует тщательного подхода:
- При получении разрешения: Если разрешение было предоставлено, продолжайте нормальную работу приложения.
- Чистота кода: Ведите аккуратное и документированное описание кода, связанного с разрешениями, чтобы упростить поддержку.
- При отказе в разрешении: Если разрешение не получено, качественно уменьшите функционал приложения, информировав пользователя о возникших ограничениях.
Полезные материалы
- Запрос разрешения в реальном времени | Разработчики Android — основное руководство для реализации запросов разрешений в Android.
- Разрешения в Android | Разработчики Android — Подробный обзор системы разрешений Android.
- Модель разрешений Android – Учебник — Подробный учебник по управлению разрешениями Android Marshmallow.
- GitHub – googlesamples/easypermissions: Упрощение управления разрешениями в Android M — Полезная библиотека для работы с разрешениями в Android.
- Runtime Permissions in Android 6.0 Marshmallow (Android Development Patterns Ep 3) – YouTube — Видеоурок о запросе и управлении разрешениями во время выполнения.