Normal Permission в Android — что это, уровни защиты и принцип работы

Автор: IT Sectr Опубликовано: 2026-05-20 Время чтения: 8 мин

Normal Permission — это категория разрешений в Android, которые система предоставляет автоматически без запроса у пользователя. По данным Android Developer Documentation, 2024, нормальные разрешения имеют ProtectionLevel normal и не требуют runtime-диалога, в отличие от опасных. Они охватывают доступ к интернету, состоянию сети и вибрации, не создавая риска для конфиденциальных данных пользователя.

Главное

  • Normal Permission — категория разрешений Android с ProtectionLevel normal, предоставляемых автоматически при установке.
  • Для использования достаточно добавить uses-permission в манифест — диалог пользователю не показывается.
  • Главное отличие от опасных — отсутствие runtime-запроса и невозможность отзыва через настройки.
  • Список включает INTERNET, ACCESS_NETWORK_STATE, VIBRATE, ACCESS_WIFI_STATE и другие системные константы.
  • Проверить уровень защиты можно через PackageManager.getPermissionInfo в коде приложения.

Что такое Normal Permission в Android

Normal Permission — это тип системных разрешений Android с ProtectionLevel normal, предоставляемый приложению автоматически в момент установки. Разработчику не требуется писать код для запроса — достаточно указать разрешение в AndroidManifest.xml. Пользователь не видит диалогов и не может отозвать normal permission отдельно, только удалив приложение целиком.

Система Android классифицирует нормальные разрешения как низкорисковые — они не открывают доступ к личным данным, камере или микрофону. Типичные примеры: доступ к интернету, управление вибрацией, чтение состояния Wi-Fi. По данным Android Security Model (2024), около 40 процентов всех системных разрешений относятся к категории normal.

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

История появления категории

Разделение на нормальные и опасные разрешения появилось в Android 6.0 Marshmallow (API 23). До этой версии все разрешения запрашивались при установке — пользователь видел единый список и принимал или отклонял его целиком. Normal Permission сохранил эту модель для низкорисковых операций, а Dangerous перешёл на runtime-запрос. Это изменение улучшило пользовательский опыт и одновременно повысило безопасность.

Какие API требуют Normal Permission

Многие системные API Android требуют явного указания нормального разрешения, даже если доступ автоматический. Например, класс ConnectivityManager требует ACCESS_NETWORK_STATE, VibratorService требует VIBRATE, WifiManager требует ACCESS_WIFI_STATE. Без объявления соответствующего uses-permission вызов этих API приведёт к SecurityException.

Как работает ProtectionLevel normal

ProtectionLevel normal — это минимальный уровень защиты в Android Permission System. Разрешения с этим уровнем объявляются в манифесте, и система проверяет декларацию при установке, предоставляя доступ без вмешательства пользователя. Никакие UI-элементы не показываются, никакие колбэки не вызываются.

Механизм проверки работает на уровне PackageManager. При установке APK система сканирует все теги uses-permission, определяет уровень защиты каждого разрешения через сопоставление с системными дефинициями в файлах permissions.xml и для normal-level просто регистрирует доступ. Процесс занимает миллисекунды и не требует взаимодействия с пользовательским интерфейсом.

Алгоритм предоставления выглядит следующим образом:

  • Система читает манифест в момент установки приложения
  • Сопоставляет protectionLevel в /etc/permissions/ на устройстве
  • При значении normal — автоматически грантит доступ
  • Разрешение остаётся активным до полного удаления приложения

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

Normal Permission vs Dangerous Permission

Normal и Dangerous Permission — две противоположные категории защиты в Android. Главное отличие — в способе предоставления: нормальные даются автоматически при установке, опасные требуют явного согласия через runtime-диалог. Это различие заложено в архитектуре безопасности Android начиная с версии 6.0 Marshmallow.

Сравнение ключевых характеристик:

ХарактеристикаNormal PermissionDangerous Permission
ProtectionLevelnormaldangerous
Запрос у пользователяНе требуетсяRuntime-диалог обязателен
Возможность отзываНет, только удаление приложенияДа, через настройки в любой момент
Проверка в кодеВсегда PERMISSION_GRANTEDcheckSelfPermission обязателен
ПримерыINTERNET, VIBRATE, ACCESS_NETWORK_STATECAMERA, RECORD_AUDIO, ACCESS_FINE_LOCATION

Разница в запросе у пользователя

Пользователь не видит никаких диалогов при запросе Normal Permission. Если приложению нужен INTERNET — оно получает его молча. Для Dangerous Permission система показывает модальный диалог с описанием запрашиваемого доступа. Пользователь нажимает Allow или Deny, а позже может отозвать разрешение в любой момент через Settings. Это ключевое UX-отличие, определяющее стратегию разработки интерфейса.

Когда выбирать Normal

Normal следует использовать во всех случаях, когда доступ не касается чувствительных данных. ACCESS_NETWORK_STATE для проверки подключения, VIBRATE для тактильной обратной связи, INTERNET для HTTP-запросов — всё это нормальные разрешения. Применение dangerous уровня там, где достаточно normal, — плохая практика, создающая лишние диалоги и снижающая доверие пользователя к приложению.

Список нормальных разрешений в Android

Android определяет несколько десятков нормальных разрешений, каждое из которых соответствует определённой системной функции. Все они доступны через константы класса Manifest.permission. Ниже приведён перечень наиболее часто используемых в разработке приложений.

КонстантаДоступОписание
INTERNETСетьОткрытие сетевых сокетов для HTTP-запросов
ACCESS_NETWORK_STATEСетьПолучение информации о состоянии сети
ACCESS_WIFI_STATEWi-FiЧтение информации о Wi-Fi-соединениях
VIBRATEВибрацияУправление вибромотором устройства
BLUETOOTHBluetoothПодключение к Bluetooth-устройствам
WAKE_LOCKПитаниеБлокировка перехода процессора в сон
SET_ALARMБудильникУстановка будильника через AlarmManager
CHANGE_NETWORK_STATEСетьИзменение состояния сетевого подключения

Группы нормальных разрешений

Нормальные разрешения не группируются в Permission Group для целей отображения в UI. Группы в Android предназначены для экрана настроек, где показываются только опасные разрешения. Однако логически normal разрешения можно разделить на категории: сетевые (INTERNET, ACCESS_NETWORK_STATE), аппаратные (VIBRATE, WAKE_LOCK), системные (SET_ALARM) и Bluetooth-разрешения.

Некоторые константы из Manifest.permission могут менять уровень защиты на разных версиях Android. Например, BLUETOOTH_CONNECT на Android 12+ стал опасным разрешением с runtime-запросом, хотя в более старых версиях был normal. Разработчикам рекомендуется проверять актуальный protectionLevel для целевого API через документацию.

Проверка Normal Permission через PackageManager

Разработчик может программно проверить, является ли разрешение нормальным, через PackageManager. Метод getPermissionInfo возвращает PermissionInfo, поле protectionLevel которого содержит флаг PermissionInfo.PROTECTION_NORMAL. Это полезно для динамической обработки и отладки.

kotlin
fun isNormalPermission(permission: String): Boolean {
    val pm = packageManager
    val info = pm.getPermissionInfo(
        permission,
        PackageManager.GET_META_DATA
    )
    return info.protectionLevel ==
        PermissionInfo.PROTECTION_NORMAL
}

Как объявить Normal Permission в манифесте

Объявление Normal Permission в AndroidManifest.xml — простейшая операция, требующая один тег uses-permission. Дополнительная конфигурация protectionLevel не требуется, так как уровень защиты определяется системной дефиницией, а не манифестом приложения. Разработчик просто указывает полное имя константы.

xml
<!-- AndroidManifest.xml -->
<uses-permission
    android:name="android.permission.INTERNET" />
<uses-permission
    android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission
    android:name="android.permission.VIBRATE" />

Система при установке обрабатывает все декларации. Если хотя бы одно из указанных разрешений имеет protectionLevel, отличный от normal, потребуется runtime-запрос. INTERNET — самое популярное нормальное разрешение, присутствующее в большинстве Android-приложений, особенно тех, что выполняют HTTP-запросы или загружают контент из сети.

Пример полного манифеста

Полный пример AndroidManifest.xml с нормальными и опасным разрешением демонстрирует разницу: синтаксически теги uses-permission одинаковы, но на этапе выполнения INTERNET и VIBRATE будут предоставлены автоматически, а CAMERA потребует диалога.

xml
<manifest
    xmlns:android="http://schemas.android.com/apk/res/android">

    <!-- Normal permissions -->
    <uses-permission
        android:name="android.permission.INTERNET" />
    <uses-permission
        android:name="android.permission.VIBRATE" />

    <!-- Dangerous permission -->
    <uses-permission
        android:name="android.permission.CAMERA" />
</manifest>

Manifest Merger и Normal Permission

При использовании библиотек — Google Play Services, Firebase, Glide — они могут добавлять собственные uses-permission в итоговый манифест через Manifest Merger. Некоторые из них нормальные (INTERNET для Firebase), другие опасные (ACCESS_FINE_LOCATION для Google Maps). Разработчику стоит проверять итоговый merged manifest в build/outputs/logs/manifest-merger-report.txt перед публикацией.

Ограничения Normal Permission

Normal Permission имеет два принципиальных ограничения: невозможность отзыва пользователем и отсутствие UI для управления. Если пользователь не доверяет приложению, но нормальное разрешение уже выдано автоматически — единственный выход удалить приложение. Это создаёт определённый риск, так как normal разрешения не блокируются стандартными средствами Android.

Дополнительное ограничение проявляется на устройствах с несколькими профилями (Work Profile, Multiple Users). Normal Permission предоставляется сразу для всех профилей — приложение не может ограничить разрешение только одним. В корпоративных сценариях это решается через Managed Configurations.

Невозможно проверить, использует ли приложение Normal Permission в данный момент. Системный метод checkSelfPermission работает только для опасных разрешений. Для normal он всегда возвращает PERMISSION_GRANTED, что не отражает реальную активность. Это стоит учитывать при аудите безопасности и анализе поведения приложения.

Также стоит помнить, что некоторые производители устройств (Xiaomi, Huawei, Samsung) модифицируют стандартное поведение разрешений. На их прошивках Normal Permission может требовать дополнительных разрешений в фирменной оболочке MIUI или EMUI. Разработчикам рекомендуется тестировать работу на реальных устройствах разных вендоров.

Часто задаваемые вопросы

Чем Normal Permission отличается от Dangerous?

Normal Permission предоставляется автоматически при установке без диалога. Dangerous требует runtime-запроса с явным согласием пользователя и может быть отозван через настройки. Normal использует ProtectionLevel normal, Dangerous — protectionLevel dangerous.

Нужно ли писать код для Normal Permission?

Нет, для нормальных разрешений достаточно объявить uses-permission в AndroidManifest.xml. Код для запроса не требуется — система предоставляет доступ автоматически. Это отличает их от опасных, где нужен ActivityCompat.requestPermissions.

Какие Normal Permission самые популярные?

Самые часто используемые: INTERNET (сетевые запросы), ACCESS_NETWORK_STATE (проверка подключения), VIBRATE (тактильная обратная связь) и WAKE_LOCK (удержание процессора). Практически каждое Android-приложение использует минимум INTERNET.

Можно ли отозвать Normal Permission?

Нет, Normal Permission нельзя отозвать через настройки приложения. Единственный способ прекратить доступ — удалить приложение. Это ключевое отличие от опасных разрешений, которые пользователь может отключить в любой момент.

Как проверить ProtectionLevel разрешения?

Используйте PackageManager.getPermissionInfo, передав строковое имя разрешения. Метод возвращает PermissionInfo с полем protectionLevel. Сравните с константами PermissionInfo.PROTECTION_NORMAL или PROTECTION_DANGEROUS для определения категории.

Итоги

  • Normal Permission — категория разрешений Android с ProtectionLevel normal, выдаваемая автоматически при установке.
  • Для объявления достаточно тега uses-permission в AndroidManifest.xml без runtime-кода.
  • От опасных отличаются отсутствием диалога, невозможностью отзыва и низким уровнем риска.
  • Самые популярные: INTERNET, ACCESS_NETWORK_STATE, VIBRATE, ACCESS_WIFI_STATE и WAKE_LOCK.
  • ProtectionLevel проверяется через PackageManager.getPermissionInfo в коде.
  • Нормальные разрешения не отображаются в экране настроек приложений.
  • При использовании библиотек стоит проверять итоговый манифест через Manifest Merger.

Мы разработаем мобильное приложение под ключ

IT Sectr создаёт приложения для iOS и Android для стартапов и бизнеса с 2017 года. Мы проконсультируем вас и предложим наилучшее решение.

Обсудить проект

Читайте также