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 систем класификује нормалне дозволе као нискоризичне — one не отварају приступ личним подацима, камери или микрофону. Типични примери: приступ интернету, управљање вибрацијом, читање стања 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МрежаОтварање мрежних socket-а за 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) мењају стандардно понашање дозвола. На њиховим фирмверима, 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. године. Саветоваћемо вас и предложити најбоље решење.

Разговарајте о пројекту

Прочитајте такође