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 року. Ми проконсультуємо вас і запропонуємо найкраще рішення.

Обговорити проект

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