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

Какие знаешь разрешения в Android?

1.3 Junior🔥 171 комментариев
#Android компоненты

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

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

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

Разрешения (Permissions) в Android

В Android разрешения — это механизм безопасности, который контролирует доступ приложения к защищённым данным (контакты, SMS, местоположение) и системным функциям (камера, интернет, Bluetooth). Они защищают приватность пользователя и целостность системы, требуя явного согласия пользователя на доступ.


Классификация разрешений

1. Обычные (Normal Permissions)

Запрашиваются автоматически при установке, не требуют явного согласия пользователя, так как не затрагивают конфиденциальные данные.

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

2. Опасные (Dangerous Permissions)

Затрагивают приватность или могут повлиять на работу устройства. Требуют явного согласия пользователя во время выполнения (runtime). Группируются по категориям — если пользователь разрешает одну операцию в группе, другие разрешения этой группы предоставляются автоматически.

  • Группы (Android 6.0+):
    • 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
    • SENSORS: BODY_SENSORS
    • SMS: SEND_SMS, RECEIVE_SMS, READ_SMS
    • STORAGE: READ_EXTERNAL_STORAGE, WRITE_EXTERNAL_STORAGE (для Android 10+ используются scoped storage)

3. Особые (Special Permissions)

Доступ к исключительным функциям, запрашиваются через специальные Intent'ы или системные диалоги.

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

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

Введены в Android 11 (API 30), автоматически предоставляются при установке, если пользователь соглашается с запросом.

  • Примеры: QUERY_ALL_PACKAGES (доступ к списку установленных приложений).

Работа с опасными разрешениями (Runtime Permissions)

Начиная с Android 6.0 (API 23), опасные разрешения запрашиваются во время выполнения. Алгоритм:

  1. Объявить разрешение в AndroidManifest.xml:
<uses-permission android:name="android.permission.CAMERA" />
  1. Проверить наличие разрешения в коде:
if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) 
    != PackageManager.PERMISSION_GRANTED) {
    // Разрешение не предоставлено
}
  1. Запросить разрешение, если оно необходимо:
ActivityCompat.requestPermissions(this, 
    arrayOf(Manifest.permission.CAMERA), 
    REQUEST_CODE_CAMERA)
  1. Обработать ответ пользователя:
override fun onRequestPermissionsResult(requestCode: Int, 
                                        permissions: Array<String>, 
                                        grantResults: IntArray) {
    when (requestCode) {
        REQUEST_CODE_CAMERA -> {
            if (grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                // Разрешение предоставлено
            } else {
                // Разрешение отклонено
            }
        }
    }
}

Best Practices

  • Запрашивайте разрешения контекстно: объясняйте пользователю, зачем нужно разрешение, перед запросом (используйте shouldShowRequestPermissionRationale()).
  • Уважайте отказ: предоставляйте функциональность, даже если разрешение не дано, насколько это возможно.
  • Группируйте запросы: запрашивайте логически связанные разрешения вместе, но избегайте "переспроса".
  • Тестируйте сценарии: проверяйте работу приложения при отказе, повторном запросе, "больше не спрашивать".
  • Для Android 10+ используйте Scoped Storage: вместо READ/WRITE_EXTERNAL_STORAGE применяйте MediaStore или системный файловый диалог.

Нововведения

  • Android 11 (API 30): одноразовые разрешения, автосброс неиспользуемых разрешений.
  • Android 12 (API 31): приблизительное местоположение (ACCESS_COARSE_LOCATION), новые разрешения для Bluetooth.
  • Android 13 (API 33): отдельные разрешения для уведомлений (POST_NOTIFICATIONS), более детальный контроль медиафайлов.

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

Какие знаешь разрешения в Android? | PrepBro