ПРИХОДИТЕ УЧИТЬСЯ НОВОЙ ПРОФЕССИИ ЛЕТОМ СО СКИДКОЙ ДО 70%Забронировать скидку

Запрос нескольких разрешений в Android 6.0: шаг за шагом

Пройдите тест, узнайте какой профессии подходите и получите бесплатную карьерную консультацию
В конце подарим скидку до 55% на обучение
Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Чтобы надлежащим образом управлять разрешениями в Android Marshmallow (API 23), воспользуйтесь методом ActivityCompat.requestPermissions. Составьте массив требуемых разрешений, проверьте, что каждое из них предоставлено с помощью ContextCompat.checkSelfPermission, и запросите те, которые не были утверждены. В обработчике onRequestPermissionsResult убедитесь, что все запрошенные разрешения были предоставлены. Пример кода на Java приведён ниже:

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;
}

Этот сценарий помогает эффективно работать с разрешениями.

Пройдите тест и узнайте подходит ли вам сфера IT
Пройти тест

Реализация разрешений: лучшие практики

При работе с запросами разрешений руководствуйтесь следующими рекомендациями:

  • Информируйте пользователя: перед запросом разрешения объясните, почему оно необходимо с помощью shouldShowRequestPermissionRationale().
  • Реагируйте на отказы: Если пользователь отказал в предоставлении разрешения, предложите ему пересмотреть настройки приложения.
  • Объявляйте необходимые разрешения: Указывайте требуемые разрешения в секции manifest.permission в вашем AndroidManifest.xml.
  • Ограничивайте количество запросов: Запрашивайте только те разрешения, которые действительно важны для вашего приложения.
  • Запрашивайте разрешения группами: Скомбинируйте запросы разрешений, чтобы минимизировать неудобства для пользователя.
  • Разделяйте логику разрешений: В onRequestPermissionsResult() контролируйте каждое разрешение отдельно для увеличения надёжности процесса.

Визуализация

Вот как система Android 6.0 управляет запросами разрешений:

Markdown
Скопировать код
📚 ЗАПРОС РАЗРЕШЕНИЯ: "Прошу предоставить доступ к ресурсам."

Каждое разрешение относится к определённому ресурсу:

Markdown
Скопировать код
🔑 Разрешения:
- 📷 Доступ к камере
- 📒 Доступ к контактам
- 📍 Геолокация
- 🎤 Использование микрофона
- 📁 Доступ к файловой системе

Система Android проверяет, были ли предоставлены разрешения:

Markdown
Скопировать код
| Ресурс       | Предоставлено разрешение? |
|--------------|----------------------|
| 📷 Камера    | ✅                    |
| 📒 Контакты  | ❌                    |
| 📍 Геолокация| ✅                    |
| 🎤 Микрофон  | ❌                    |
| 📁 Файлы     | ✅                    |

Каждое разрешение обрабатывается по отдельности:

Markdown
Скопировать код
- Каждое разрешение: предоставлено (✅) или отклонено (❌)
- Без разрешения доступ запрещён (🚫)

Персональная информация должна быть уважаема при работе с обработкой разрешений.

Учёт мелких деталей

Для комфортного взаимодействия с пользователем:

  • Оставляйте интервалы между запросами: Не нагружайте пользователя частыми запросами разрешений.
  • Давайте краткие объяснения: Используйте понятный язык при пояснении причин запросов.
  • Будьте прозрачны: Ясно указывайте, зачем приложению нужно каждое разрешение.
  • Предоставляйте дополнительные сведения: Опытным пользователям может быть полезно получить подробную информацию или ссылки для самостоятельного изучения.

Балансировка на грани

Грамотное управление разрешениями требует тщательного подхода:

  • При получении разрешения: Если разрешение было предоставлено, продолжайте нормальную работу приложения.
  • Чистота кода: Ведите аккуратное и документированное описание кода, связанного с разрешениями, чтобы упростить поддержку.
  • При отказе в разрешении: Если разрешение не получено, качественно уменьшите функционал приложения, информировав пользователя о возникших ограничениях.

Полезные материалы

  1. Запрос разрешения в реальном времени | Разработчики Androidосновное руководство для реализации запросов разрешений в Android.
  2. Разрешения в Android | Разработчики AndroidПодробный обзор системы разрешений Android.
  3. Модель разрешений Android – УчебникПодробный учебник по управлению разрешениями Android Marshmallow.
  4. GitHub – googlesamples/easypermissions: Упрощение управления разрешениями в Android MПолезная библиотека для работы с разрешениями в Android.
  5. Runtime Permissions in Android 6.0 Marshmallow (Android Development Patterns Ep 3) – YouTubeВидеоурок о запросе и управлении разрешениями во время выполнения.