← Назад к вопросам

Какие знаешь виды Permission?

2.0 Middle🔥 141 комментариев
#Android компоненты

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI6 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Виды разрешений (Permissions) в Android

В Android система разрешений является фундаментальным механизмом защиты приватности пользователя и безопасности устройства. Разрешения делятся на несколько категорий в зависимости от их уровня риска, способа назначения и времени запроса. Понимание этих категорий критически важно для корректной разработки приложений.

1. Классификация по уровню доступа и времени запроса (основная)

Обычные разрешения (Normal Permissions)

Это разрешения, которые дают доступ к данным или ресурсам, представляющим минимальный риск для приватности пользователя и работы других приложений. Они запрашиваются автоматически системой во время установки приложения (до Android 6.0) или предоставляются автоматически при объявлении в манифесте (начиная с Android 6.0). Пользователь не может явно отозвать их.

  • Примеры: INTERNET, ACCESS_NETWORK_STATE, BLUETOOTH, VIBRATE.
  • Объявление в манифесте:
    <uses-permission android:name="android.permission.INTERNET" />
    

Опасные разрешения (Dangerous Permissions)

Запрашивают доступ к конфиденциальным данным пользователя (контакты, звонки, местоположение) или функциям, которые могут повлиять на работу устройства или других приложений. Требуют явного согласия пользователя во время выполнения (Runtime Permissions). Введены, начиная с Android 6.0 (API 23).

  • Группы разрешений: Опасные разрешения сгруппированы. Если пользователь предоставляет одно разрешение в группе, все остальные в этой группе предоставляются автоматически при запросе.
  • Основные группы:
    *   `CALENDAR` (`READ_CALENDAR`, `WRITE_CALENDAR`)
    *   `CAMERA` (`CAMERA`)
    *   `CONTACTS` (`READ_CONTACTS`, `WRITE_CONTACTS`, `GET_ACCOUNTS`)
    *   `LOCATION` (`ACCESS_FINE_LOCATION`, `ACCESS_COARSE_LOCATION`)
    *   `MICROPHONE` (`RECORD_AUDIO`)
    *   `PHONE` (`READ_PHONE_STATE`, `CALL_PHONE`, `READ_CALL_LOG`, `WRITE_CALL_LOG`, `ADD_VOICEMAIL`, `USE_SIP`, `PROCESS_OUTGOING_CALLS`)
    *   `SENSORS` (`BODY_SENSORS`)
    *   `SMS` (`SEND_SMS`, `RECEIVE_SMS`, `READ_SMS`, `RECEIVE_WAP_PUSH`, `RECEIVE_MMS`)
    *   `STORAGE` (`READ_EXTERNAL_STORAGE`, `WRITE_EXTERNAL_STORAGE`) — на Android 10+ заменены на Scoped Storage.
  • Запрос во время выполнения:
    // 1. Проверка наличия разрешения
    if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
        // 2. Запрос разрешения, если его нет
        ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.CAMERA), REQUEST_CODE_CAMERA)
    } else {
        // 3. Разрешение уже есть — выполняем действие
        openCamera()
    }
    
    // 4. Обработка ответа пользователя
    override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults)
        if (requestCode == REQUEST_CODE_CAMERA && grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            openCamera()
        } else {
            // Показать объяснение, если нужно
        }
    }
    

Разрешения с подписью (Signature Permissions)

Предоставляются автоматически только тем приложениям, которые подписаны тем же сертификатом, что и приложение, объявившее это разрешение. Используются для безопасного взаимодействия между приложениями одного разработчика.

  • Пример: Разрешения, объявляемые для собственного ContentProvider или BroadcastReceiver.

Разрешения времени установки (Install-time Permissions)

Особая категория, введенная для упрощения работы пользователя. Включает большинство обычных разрешений, а также некоторые опасные, которые можно запросить как "разрешения при установке" (для этого в манифесте используются атрибуты maxSdkVersion или <install-permission>). Пользователь видит их только в магазине приложов перед установкой.

2. Классификация по специальным типам

Фоновые разрешения (Background Permissions)

Отдельный подтип для доступа к данным в фоне (например, доступ к местоположению, когда приложение не активно). Требуют дополнительного запроса поверх основного опасного разрешения.

  • Пример: ACCESS_BACKGROUND_LOCATION.

Разрешения для специальных возможностей (Special App Permissions)

Управляются через отдельный экран настроек системы и не могут быть запрошены стандартным API requestPermissions().

  • Примеры: SYSTEM_ALERT_WINDOW (рисование поверх других окон), WRITE_SETTINGS (изменение системных настроек).

3. Особенности на новых версиях Android

  • Android 10 (API 29) и Scoped Storage: Введена новая модель доступа к хранилищу. READ_EXTERNAL_STORAGE и WRITE_EXTERNAL_STORAGE эволюционировали. Для доступа к общим файлам медиа используются разрешения READ_MEDIA_IMAGES, READ_MEDIA_VIDEO, READ_MEDIA_AUDIO, а для доступа к специфическим файлам — системный пикер (Intent.ACTION_OPEN_DOCUMENT).
  • Android 11 (API 30) и одноразовые разрешения (One-time Permissions): Пользователь может предоставить доступ к камере, микрофону или местоположению только один раз (на одну сессию).
  • Android 12 (API 31): Уточнены запросы на приблизительное и точное местоположение (ACCESS_COARSE_LOCATION и ACCESS_FINE_LOCATION).
  • Android 13 (API 33): Добавлены отдельные разрешения для уведомлений (POST_NOTIFICATIONS), доступа к медиафайлам разбиты на более четкие категории (READ_MEDIA_IMAGES, READ_MEDIA_VIDEO, READ_MEDIA_AUDIO), а также введены новые разрешения для работы в фоне (NEARBY_WIFI_DEVICES).

Важные принципы работы:

  • Минимизация разрешений: Запрашивайте только те разрешения, которые абсолютно необходимы для работы ключевых функций.
  • Правильное объяснение (Rationale): Всегда будьте готовы объяснить пользователю, зачем вашему приложению нужно то или иное разрешение, особенно если он уже отклонил запрос ранее.
  • Обработка отказа: Приложение должно корректно работать даже при отказе в выдаче опасного разрешения, отключая или ограничивая соответствующие функции.

Понимание этих видов и правил их использования — обязательное условие для создания безопасных, пользовательских и соответствующих политикам Google Play приложений.