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.

Важно свойство — нормалните разрешения не се отнемат в runtime чрез Settings. Ако потребителят иска да забрани достъпа, единственият начин е да изтрие приложението. Разработчиците трябва да вземат това предвид в архитектурата, но за потребителите този подход опростява взаимодействието: без диалози при първото стартиране.

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

Разделението на нормални и опасни разрешения се появи в Android 6.0 Marshmallow (API 23). Преди тази версия всички разрешения се изискваха при инсталиране — потребителят виждаше един списък и го приемаше или отхвърляше изцяло. Normal Permission запази този модел за нискорискови операции, а Dangerous премина към runtime заявка. Тази промяна подобри потребителското изживяване и едновременно увеличи сигурността.

Кои API изискват Normal Permission

Много системни Android API изискват изрично посочване на нормално разрешение, дори ако достъпът е автоматичен. Например класът ConnectivityManager изисква ACCESS_NETWORK_STATE, VibratorService изисква VIBRATE, WifiManager изисква ACCESS_WIFI_STATE. Без декларация на съответния uses-permission, извикването на тези API ще доведе до SecurityException.

Как работи ProtectionLevel normal

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

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

Алгоритъмът за предоставяне изглежда така:

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

Потребителят не може да отмени нормалното разрешение чрез интерфейса. В настройките на приложението в секцията Разрешения се показват само опасните разрешения. Това контрастира с 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 са предназначени за екрана с настройки, където се показват само опасните разрешения. Въпреки това, логически нормалните разрешения могат да бъдат разделени в категории: мрежови (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). Разработчикът трябва да провери крайния обединен манифест в build/outputs/logs/manifest-merger-report.txt преди публикуване.

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

Normal Permission има две основни ограничения: невъзможност за отнемане от потребителя и липса на UI за управление. Ако потребителят не вярва на приложението, но нормалното разрешение вече е автоматично предоставено — единственият изход е изтриване на приложението. Това създава определен риск, тъй като нормалните разрешения не се блокират от стандартните Android инструменти.

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

Не е възможно да се провери дали приложението използва Normal Permission в момента. Системният метод checkSelfPermission работи само за опасни разрешения. За normal винаги връща PERMISSION_GRANTED, което не отразява реалната активност. Това трябва да се вземе предвид при одит на сигурността и анализ на поведението на приложението.

Също така трябва да се помни, че някои производители на устройства (Xiaomi, Huawei, Samsung) променят стандартното поведение на разрешенията. На техния firmware 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 г. Ще ви консултираме и ще предложим най-доброто решение.

Обсъдете проекта

Прочетете също