Normal Permission — az Android engedélyek egy kategóriája, amelyeket a rendszer automatikusan biztosít a felhasználó megkérdezése nélkül. A Android Developer Documentation, 2024 szerint a normál engedélyek ProtectionLevel normal értékkel rendelkeznek, és a veszélyesektől eltérően nem igényelnek runtime párbeszédablakot. Lefedik az internethez, a hálózati állapothoz és a rezgéshez való hozzáférést anélkül, hogy kockázatot jelentenének a felhasználó bizalmas adataira.
Főbb pontok
Normal Permission — az Android rendszerengedélyek egy típusa ProtectionLevel normal értékkel, amelyet az alkalmazás automatikusan megkap a telepítés pillanatában. A fejlesztőnek nem kell kódot írnia a kérelemhez — elég megadni az engedélyt az AndroidManifest.xml-ben. A felhasználó nem lát párbeszédablakokat, és nem vonhatja vissza a normal permission-t külön, csak a teljes alkalmazás törlésével.
Az Android rendszer a normál engedélyeket alacsony kockázatúként osztályozza — nem biztosítanak hozzáférést személyes adatokhoz, kamerához vagy mikrofonhoz. Tipikus példák: internet-hozzáférés, rezgésvezérlés, Wi-Fi állapot olvasása. A Android Security Model (2024) szerint az összes rendszerengedély körülbelül 40 százaléka a normal kategóriába tartozik.
Fontos tulajdonság — a normál engedélyek nem vonhatók vissza runtime-ban a Settings-en keresztül. Ha a felhasználó tiltani akarja a hozzáférést, az egyetlen mód az alkalmazás törlése. A fejlesztőknek ezt figyelembe kell venniük az architektúrában, de a felhasználók számára ez az approach egyszerűsíti az interakciót: nincsenek párbeszédablakok az első indításkor.
A normál és veszélyes engedélyekre való felosztás az Android 6.0 Marshmallow (API 23) verzióban jelent meg. Ezen verzió előtt minden engedélyt telepítéskor kértek — a felhasználó egyetlen listát látott, és azt egészében elfogadta vagy elutasította. A Normal Permission megtartotta ezt a modellt az alacsony kockázatú műveletekhez, míg a Dangerous áttért a runtime kérelemre. Ez a változás javította a felhasználói élményt és egyidejűleg növelte a biztonságot.
Számos Android rendszer-API megköveteli a normál engedély explicit megadását, még akkor is, ha a hozzáférés automatikus. Például a ConnectivityManager osztály ACCESS_NETWORK_STATE-t, a VibratorService VIBRATE-t, a WifiManager ACCESS_WIFI_STATE-t igényel. A megfelelő uses-permission deklarálása nélkül ezen API-k hívása SecurityException-t eredményez.
ProtectionLevel normal — a minimális védelmi szint az Android Permission System-ben. Az ezzel a szinttel rendelkező engedélyeket a manifestben deklarálják, és a rendszer telepítéskor ellenőrzi a deklarációt, biztosítva a hozzáférést a felhasználó beavatkozása nélkül. Nem jelenik meg UI-elem, nem hívódik meg callback.
Az ellenőrzési mechanizmus a PackageManager szintjén működik. Az APK telepítésekor a rendszer beolvassa az összes uses-permission tag-et, meghatározza az egyes engedélyek védelmi szintjét a permissions.xml fájlokban lévő rendszerdefiníciókkal való összehasonlítással, és normal-level esetén egyszerűen regisztrálja a hozzáférést. A folyamat ezredmásodpercekig tart, és nem igényel interakciót a felhasználói felülettel.
A biztosítás algoritmusa a következő:
A felhasználó nem vonhatja vissza a normál engedélyt a felületen keresztül. Az alkalmazás beállításaiban az Engedélyek szakaszban csak a veszélyes engedélyek jelennek meg. Ez ellentétben áll az iOS-szel, ahol minden engedély külön megerősítést igényel, függetlenül a funkció érzékenységi szintjétől.
Normal és Dangerous Permission — két ellentétes védelmi kategória Androidban. A fő különbség a biztosítás módjában van: a normál engedélyek automatikusan járnak telepítéskor, a veszélyesek explicit beleegyezést igényelnek runtime párbeszédablakon keresztül. Ez a különbség az Android 6.0 Marshmallow verziótól kezdve be van építve a biztonsági architektúrába.
A legfontosabb jellemzők összehasonlítása:
| Jellemző | Normal Permission | Dangerous Permission |
|---|---|---|
| ProtectionLevel | normal | dangerous |
| Felhasználói kérelem | Nem szükséges | Runtime párbeszédablak kötelező |
| Visszavonás lehetősége | Nem, csak alkalmazás törlése | Igen, beállításokon keresztül bármikor |
| Ellenőrzés kódban | Mindig PERMISSION_GRANTED | checkSelfPermission kötelező |
| Példák | INTERNET, VIBRATE, ACCESS_NETWORK_STATE | CAMERA, RECORD_AUDIO, ACCESS_FINE_LOCATION |
A felhasználó nem lát párbeszédablakot a Normal Permission kérésekor. Ha az alkalmazásnak INTERNET kell — csendben megkapja. Dangerous Permission esetén a rendszer egy modális párbeszédablakot jelenít meg a kért hozzáférés leírásával. A felhasználó megnyomja az Allow vagy Deny gombot, és később bármikor visszavonhatja az engedélyt a Settings-en keresztül. Ez a legfontosabb UX-különbség, amely meghatározza a felületfejlesztés stratégiáját.
A Normal-t minden olyan esetben használni kell, amikor a hozzáférés nem érzékeny adatokat érint. ACCESS_NETWORK_STATE a kapcsolat ellenőrzéséhez, VIBRATE a tapintható visszajelzéshez, INTERNET a HTTP-kérésekhez — ezek mind normál engedélyek. A dangerous szint alkalmazása ott, ahol a normal elegendő, rossz gyakorlat, felesleges párbeszédablakokat hoz létre és csökkenti a felhasználó bizalmát az alkalmazásban.
Az Android meghatároz több tucat normál engedélyt, amelyek mindegyike egy adott rendszerfunkciónak felel meg. Mindegyik elérhető a Manifest.permission osztály konstansain keresztül. Az alábbiakban a leggyakrabban használt engedélyek listája található az alkalmazásfejlesztésben.
| Konstans | Hozzáférés | Leírás |
|---|---|---|
| INTERNET | Hálózat | Hálózati socket-ek megnyitása HTTP-kérésekhez |
| ACCESS_NETWORK_STATE | Hálózat | Információk lekérése a hálózat állapotáról |
| ACCESS_WIFI_STATE | Wi-Fi | Wi-Fi kapcsolatokkal kapcsolatos információk olvasása |
| VIBRATE | Rezgés | Az eszköz vibrációs motorjának vezérlése |
| BLUETOOTH | Bluetooth | Csatlakozás Bluetooth-eszközökhöz |
| WAKE_LOCK | Tápellátás | A processzor alvó állapotba kerülésének blokkolása |
| SET_ALARM | Ébresztő | Ébresztő beállítása az AlarmManager segítségével |
| CHANGE_NETWORK_STATE | Hálózat | A hálózati kapcsolat állapotának megváltoztatása |
A normál engedélyek nincsenek Permission Group-ba csoportosítva a UI-ban való megjelenítés céljából. Az Androidban a csoportok a beállítások képernyőre szolgálnak, ahol csak a veszélyes engedélyek jelennek meg. Logikailag azonban a normál engedélyek kategóriákra oszthatók: hálózati (INTERNET, ACCESS_NETWORK_STATE), hardveres (VIBRATE, WAKE_LOCK), rendszer (SET_ALARM) és Bluetooth engedélyek.
A Manifest.permission egyes konstansai az Android különböző verzióin változtathatják a védelmi szintet. Például a BLUETOOTH_CONNECT az Android 12+ rendszeren veszélyes engedéllyé vált runtime kérelemmel, bár régebbi verziókban normal volt. A fejlesztőknek ajánlott ellenőrizni a cél API aktuális protectionLevel értékét a dokumentáción keresztül.
A fejlesztő programozottan ellenőrizheti a PackageManager segítségével, hogy egy engedély normál-e. A getPermissionInfo metódus egy PermissionInfo-t ad vissza, amelynek protectionLevel mezője tartalmazza a PermissionInfo.PROTECTION_NORMAL jelzőt. Ez hasznos a dinamikus feldolgozáshoz és hibakereséshez.
fun isNormalPermission(permission: String): Boolean {
val pm = packageManager
val info = pm.getPermissionInfo(
permission,
PackageManager.GET_META_DATA
)
return info.protectionLevel ==
PermissionInfo.PROTECTION_NORMAL
}
A Normal Permission deklarálása az AndroidManifest.xml-ben a legegyszerűbb művelet, amely mindössze egy uses-permission tag-et igényel. További protectionLevel konfiguráció nem szükséges, mert a védelmi szintet a rendszerdefiníció határozza meg, nem az alkalmazás manifest-je. A fejlesztő egyszerűen megadja a konstans teljes nevét.
<!-- 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" />
A rendszer telepítéskor feldolgozza az összes deklarációt. Ha a megadott engedélyek közül legalább egy protectionLevel-je eltér a normal-tól, runtime kérelemre lesz szükség. INTERNET — a legnépszerűbb normál engedély, amely a legtöbb Android-alkalmazásban jelen van, különösen azokban, amelyek HTTP-kéréseket hajtanak végre vagy tartalmat töltenek le a hálózatról.
A teljes AndroidManifest.xml példa normál és veszélyes engedélyekkel megmutatja a különbséget: szintaktikailag a uses-permission tag-ek azonosak, de a végrehajtási fázisban az INTERNET és VIBRATE automatikusan biztosításra kerül, míg a CAMERA párbeszédablakot igényel.
<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>
Könyvtárak — Google Play Services, Firebase, Glide — használatakor azok a Manifest Merger segítségével saját uses-permission elemeket adhatnak a végső manifesthez. Ezek egy része normál (INTERNET a Firebase esetében), másik része veszélyes (ACCESS_FINE_LOCATION a Google Maps esetében). A fejlesztőnek ellenőriznie kell a végső egyesített manifest-et a build/outputs/logs/manifest-merger-report.txt fájlban a közzététel előtt.
Normal Permission két alapvető korláttal rendelkezik: a felhasználó általi visszavonás lehetetlensége és a kezeléshez szükséges UI hiánya. Ha a felhasználó nem bízik az alkalmazásban, de a normál engedély már automatikusan ki lett állítva — az egyetlen kiút az alkalmazás törlése. Ez bizonyos kockázatot jelent, mivel a normál engedélyek nem blokkolhatók az Android szabványos eszközeivel.
További korlátozás jelentkezik a több profillal rendelkező eszközökön (Work Profile, Multiple Users). A Normal Permission azonnal biztosításra kerül az összes profil számára — az alkalmazás nem korlátozhatja az engedélyt csak egyre. Vállalati forgatókönyvekben ezt Managed Configurations segítségével oldják meg.
Nem lehet ellenőrizni, hogy az alkalmazás jelenleg használja-e a Normal Permission-t. A checkSelfPermission rendszermetódus csak a veszélyes engedélyeknél működik. Normal esetén mindig PERMISSION_GRANTED értéket ad vissza, ami nem tükrözi a tényleges aktivitást. Ezt figyelembe kell venni a biztonsági audit és az alkalmazás viselkedésének elemzése során.
Szintén érdemes megjegyezni, hogy egyes eszközgyártók (Xiaomi, Huawei, Samsung) módosítják az engedélyek szabványos viselkedését. A firmware-ükön a Normal Permission további engedélyeket igényelhet a MIUI vagy EMUI saját felületén. A fejlesztőknek ajánlott különböző gyártók valós eszközein tesztelni a működést.
Gyakran Ismételt Kérdések
Normal Permission automatikusan biztosításra kerül telepítéskor párbeszédablak nélkül. A Dangerous runtime kérelemmel, a felhasználó kifejezett beleegyezésével jár, és a beállításokon keresztül visszavonható. A Normal ProtectionLevel normal, a Dangerous protectionLevel dangerous értéket használ.
Nem, a normál engedélyekhez elég deklarálni a uses-permission elemet az AndroidManifest.xml-ben. Kód a kérelemhez nem szükséges — a rendszer automatikusan biztosítja a hozzáférést. Ez különbözteti meg őket a veszélyes engedélyektől, ahol ActivityCompat.requestPermissions szükséges.
A leggyakrabban használtak: INTERNET (hálózati kérések), ACCESS_NETWORK_STATE (kapcsolat ellenőrzése), VIBRATE (tapintható visszajelzés) és WAKE_LOCK (processzor ébren tartása). Gyakorlatilag minden Android-alkalmazás használ legalább INTERNET-et.
Nem, a Normal Permission nem vonható vissza az alkalmazás beállításain keresztül. Az egyetlen mód a hozzáférés leállítására az alkalmazás törlése. Ez a legfőbb különbség a veszélyes engedélyektől, amelyeket a felhasználó bármikor kikapcsolhat.
Használja a PackageManager.getPermissionInfo metódust, adja át az engedély nevét. A metódus egy PermissionInfo-t ad vissza a protectionLevel mezővel. Hasonlítsa össze a PermissionInfo.PROTECTION_NORMAL vagy PROTECTION_DANGEROUS konstansokkal a kategória meghatározásához.
Összefoglalás
Kulcsrakész mobilalkalmazást fejlesztünk
Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.
Olvassa el is