Normal Permission v Androidu — co to je, úrovně ochrany a princip fungování

Autor: IT Sectr Publikováno: 2026-05-20 Doba čtení: 8 min

Normal Permission — kategorie oprávnění v Androidu, která systém uděluje automaticky bez dotazu uživatele. Podle Android Developer Documentation, 2024 mají normální oprávnění ProtectionLevel normal a na rozdíl od nebezpečných nevyžadují runtime dialog. Zahrnují přístup k internetu, stavu sítě a vibracím, aniž by představovaly riziko pro důvěrná data uživatele.

Hlavní

  • Normal Permission — kategorie oprávnění Android s ProtectionLevel normal, udělovaných automaticky při instalaci.
  • Pro použití stačí přidat uses-permission do manifestu — dialog se uživateli nezobrazuje.
  • Hlavní rozdíl od nebezpečných — absence runtime požadavku a nemožnost odvolání přes nastavení.
  • Seznam zahrnuje INTERNET, ACCESS_NETWORK_STATE, VIBRATE, ACCESS_WIFI_STATE a další systémové konstanty.
  • Úroveň ochrany lze zkontrolovat pomocí PackageManager.getPermissionInfo v kódu aplikace.

Co je Normal Permission v Androidu

Normal Permission — typ systémových oprávnění Android s ProtectionLevel normal, udělovaný aplikaci automaticky v okamžiku instalace. Vývojář nemusí psát kód pro požadavek — stačí uvést oprávnění v AndroidManifest.xml. Uživatel nevidí dialogy a nemůže normal permission odvolat samostatně, pouze smazáním celé aplikace.

Systém Android klasifikuje normální oprávnění jako nízkoriziková — neposkytují přístup k osobním údajům, kameře ani mikrofonu. Typické příklady: přístup k internetu, správa vibrací, čtení stavu Wi-Fi. Podle Android Security Model (2024) patří přibližně 40 procent všech systémových oprávnění do kategorie normal.

Důležitá vlastnost — normální oprávnění se neodvolávají za běhu přes Settings. Pokud chce uživatel zakázat přístup, jediný způsob je smazání aplikace. Vývojáři by to měli zohlednit v architektuře, ale pro uživatele tento přístup zjednodušuje interakci: žádné dialogy při prvním spuštění.

Historie vzniku kategorie

Rozdělení na normální a nebezpečná oprávnění se objevilo v Android 6.0 Marshmallow (API 23). Před touto verzí byla všechna oprávnění vyžadována při instalaci — uživatel viděl jediný seznam a buď ho celý přijal, nebo odmítl. Normal Permission zachoval tento model pro nízkorizikové operace, zatímco Dangerous přešel na runtime požadavek. Tato změna zlepšila uživatelský zážitek a zároveň zvýšila bezpečnost.

Která API vyžadují Normal Permission

Mnoho systémových API Android vyžaduje explicitní uvedení normálního oprávnění, i když je přístup automatický. Například třída ConnectivityManager vyžaduje ACCESS_NETWORK_STATE, VibratorService vyžaduje VIBRATE, WifiManager vyžaduje ACCESS_WIFI_STATE. Bez deklarace odpovídajícího uses-permission povede volání těchto API k SecurityException.

Jak funguje ProtectionLevel normal

ProtectionLevel normal — minimální úroveň ochrany v Android Permission System. Oprávnění s touto úrovní se deklarují v manifestu a systém kontroluje deklaraci při instalaci, přičemž uděluje přístup bez zásahu uživatele. Nezobrazují se žádné prvky UI, nevolají se žádné callbacky.

Kontrolní mechanismus funguje na úrovni PackageManager. Při instalaci APK systém prohledá všechny tagy uses-permission, určí úroveň ochrany každého oprávnění porovnáním s definicemi systému v souborech permissions.xml a pro normal-level jednoduše zaregistruje přístup. Proces trvá milisekundy a nevyžaduje interakci s uživatelským rozhraním.

Algoritmus udělování vypadá následovně:

  • Systém přečte manifest v okamžiku instalace aplikace
  • Porovná protectionLevel v /etc/permissions/ na zařízení
  • Při hodnotě normal — automaticky udělí přístup
  • Oprávnění zůstává aktivní až do úplného smazání aplikace

Uživatel nemůže normální oprávnění odvolat přes rozhraní. V nastavení aplikace v sekci Oprávnění se zobrazují pouze nebezpečná oprávnění. To je v kontrastu s iOS, kde každé oprávnění vyžaduje samostatné potvrzení bez ohledu na úroveň citlivosti funkce.

Normal Permission vs Dangerous Permission

Normal a Dangerous Permission — dvě protichůdné kategorie ochrany v Androidu. Hlavní rozdíl je ve způsobu udělování: normální se dávají automaticky při instalaci, nebezpečná vyžadují výslovný souhlas prostřednictvím runtime dialogu. Tento rozdíl je zabudován do bezpečnostní architektury Androidu od verze 6.0 Marshmallow.

Porovnání klíčových vlastností:

VlastnostNormal PermissionDangerous Permission
ProtectionLevelnormaldangerous
Dotaz na uživateleNení vyžadovánRuntime dialog povinný
Možnost odvoláníNe, pouze smazání aplikaceAno, přes nastavení kdykoli
Kontrola v kóduVždy PERMISSION_GRANTEDcheckSelfPermission povinný
PříkladyINTERNET, VIBRATE, ACCESS_NETWORK_STATECAMERA, RECORD_AUDIO, ACCESS_FINE_LOCATION

Rozdíl v dotazu na uživatele

Uživatel nevidí žádné dialogy při požadavku Normal Permission. Pokud aplikace potřebuje INTERNET — získá jej potichu. Pro Dangerous Permission systém zobrazí modální dialog s popisem požadovaného přístupu. Uživatel stiskne Allow nebo Deny a později může oprávnění kdykoli odvolat přes Settings. To je klíčový UX rozdíl, který určuje strategii vývoje rozhraní.

Kdy zvolit Normal

Normal by se měl používat ve všech případech, kdy se přístup netýká citlivých údajů. ACCESS_NETWORK_STATE pro kontrolu připojení, VIBRATE pro hmatovou zpětnou vazbu, INTERNET pro HTTP požadavky — to vše jsou normální oprávnění. Použití nebezpečné úrovně tam, kde stačí normal, je špatná praxe, vytváří zbytečné dialogy a snižuje důvěru uživatele v aplikaci.

Seznam normálních oprávnění v Androidu

Android definuje desítky normálních oprávnění, z nichž každé odpovídá určité systémové funkci. Všechna jsou přístupná prostřednictvím konstant třídy Manifest.permission. Níže je uveden seznam nejčastěji používaných při vývoji aplikací.

KonstantaPřístupPopis
INTERNETSíťOtevírání síťových socketů pro HTTP požadavky
ACCESS_NETWORK_STATESíťZískávání informací o stavu sítě
ACCESS_WIFI_STATEWi-FiČtení informací o Wi-Fi připojeních
VIBRATEVibraceOvládání vibračního motoru zařízení
BLUETOOTHBluetoothPřipojování k Bluetooth zařízením
WAKE_LOCKNapájeníBlokování přechodu procesoru do režimu spánku
SET_ALARMBudíkNastavení budíku přes AlarmManager
CHANGE_NETWORK_STATESíťZměna stavu síťového připojení

Skupiny normálních oprávnění

Normální oprávnění se neseskupují do Permission Group pro účely zobrazení v UI. Skupiny v Androidu jsou určeny pro obrazovku nastavení, kde se zobrazují pouze nebezpečná oprávnění. Logicky však lze normální oprávnění rozdělit do kategorií: síťová (INTERNET, ACCESS_NETWORK_STATE), hardwarová (VIBRATE, WAKE_LOCK), systémová (SET_ALARM) a Bluetooth oprávnění.

Některé konstanty z Manifest.permission mohou měnit úroveň ochrany v různých verzích Androidu. Například BLUETOOTH_CONNECT se na Android 12+ stal nebezpečným oprávněním s runtime požadavkem, ačkoli ve starších verzích byl normal. Vývojářům se doporučuje kontrolovat aktuální protectionLevel pro cílové API prostřednictvím dokumentace.

Kontrola Normal Permission přes PackageManager

Vývojář může programově zkontrolovat, zda je oprávnění normální, přes PackageManager. Metoda getPermissionInfo vrací PermissionInfo, jehož pole protectionLevel obsahuje příznak PermissionInfo.PROTECTION_NORMAL. To je užitečné pro dynamické zpracování a ladění.

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

Jak deklarovat Normal Permission v manifestu

Deklarace Normal Permission v AndroidManifest.xml je nejjednodušší operace, vyžadující pouze jeden tag uses-permission. Dodatečná konfigurace protectionLevel není nutná, protože úroveň ochrany je určena systémovou definicí, nikoli manifestem aplikace. Vývojář jednoduše uvede celý název konstanty.

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" />

Systém při instalaci zpracovává všechny deklarace. Pokud má alespoň jedno z uvedených oprávnění protectionLevel odlišný od normal, bude vyžadován runtime požadavek. INTERNET — nejpopulárnější normální oprávnění, přítomné ve většině Android aplikací, zejména těch, které provádějí HTTP požadavky nebo načítají obsah ze sítě.

Příklad úplného manifestu

Úplný příklad AndroidManifest.xml s normálními a nebezpečným oprávněním ukazuje rozdíl: syntakticky jsou tagy uses-permission stejné, ale ve fázi provádění budou INTERNET a VIBRATE uděleny automaticky, zatímco CAMERA bude vyžadovat dialog.

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 a Normal Permission

Při používání knihoven — Google Play Services, Firebase, Glide — mohou tyto přidávat vlastní uses-permission do výsledného manifestu prostřednictvím Manifest Merger. Některé z nich jsou normální (INTERNET pro Firebase), jiné nebezpečné (ACCESS_FINE_LOCATION pro Google Maps). Vývojář by měl zkontrolovat výsledný sloučený manifest v build/outputs/logs/manifest-merger-report.txt před publikací.

Omezení Normal Permission

Normal Permission má dvě zásadní omezení: nemožnost odvolání uživatelem a absenci UI pro správu. Pokud uživatel aplikaci nedůvěřuje, ale normální oprávnění již bylo automaticky uděleno — jediným východiskem je smazání aplikace. To vytváří určité riziko, protože normální oprávnění nejsou blokována standardními nástroji Androidu.

Další omezení se projevuje na zařízeních s více profily (Work Profile, Multiple Users). Normal Permission je uděleno okamžitě pro všechny profily — aplikace nemůže oprávnění omezit pouze na jeden. V podnikových scénářích se to řeší prostřednictvím Managed Configurations.

Nelze zkontrolovat, zda aplikace aktuálně používá Normal Permission. Systémová metoda checkSelfPermission funguje pouze pro nebezpečná oprávnění. Pro normal vždy vrací PERMISSION_GRANTED, což neodráží skutečnou aktivitu. To je třeba zohlednit při bezpečnostním auditu a analýze chování aplikace.

Rovněž je třeba mít na paměti, že někteří výrobci zařízení (Xiaomi, Huawei, Samsung) upravují standardní chování oprávnění. Na jejich firmware může Normal Permission vyžadovat dodatečná povolení ve vlastním prostředí MIUI nebo EMUI. Vývojářům se doporučuje testovat fungování na reálných zařízeních různých výrobců.

Často kladené otázky

Čím se Normal Permission liší od Dangerous?

Normal Permission se uděluje automaticky při instalaci bez dialogu. Dangerous vyžaduje runtime požadavek s výslovným souhlasem uživatele a lze jej odvolat přes nastavení. Normal používá ProtectionLevel normal, Dangerous — protectionLevel dangerous.

Je třeba psát kód pro Normal Permission?

Ne, pro normální oprávnění stačí deklarovat uses-permission v AndroidManifest.xml. Kód pro požadavek není nutný — systém uděluje přístup automaticky. To je odlišuje od nebezpečných, kde je potřeba ActivityCompat.requestPermissions.

Která Normal Permission jsou nejoblíbenější?

Nejčastěji používaná: INTERNET (síťové požadavky), ACCESS_NETWORK_STATE (kontrola připojení), VIBRATE (hmatová zpětná vazba) a WAKE_LOCK (udržení procesoru). Prakticky každá Android aplikace používá alespoň INTERNET.

Lze Normal Permission odvolat?

Ne, Normal Permission nelze odvolat prostřednictvím nastavení aplikace. Jediný způsob, jak zastavit přístup, je smazání aplikace. To je klíčový rozdíl od nebezpečných oprávnění, která může uživatel kdykoli vypnout.

Jak zkontrolovat ProtectionLevel oprávnění?

Použijte PackageManager.getPermissionInfo s předáním názvu oprávnění. Metoda vrací PermissionInfo s polem protectionLevel. Porovnejte s konstantami PermissionInfo.PROTECTION_NORMAL nebo PROTECTION_DANGEROUS pro určení kategorie.

Shrnutí

  • Normal Permission — kategorie oprávnění Android s ProtectionLevel normal, udělovaná automaticky při instalaci.
  • Pro deklaraci stačí tag uses-permission v AndroidManifest.xml bez runtime kódu.
  • Liší se od nebezpečných absencí dialogu, nemožností odvolání a nízkou úrovní rizika.
  • Nejoblíbenější: INTERNET, ACCESS_NETWORK_STATE, VIBRATE, ACCESS_WIFI_STATE a WAKE_LOCK.
  • ProtectionLevel se kontroluje přes PackageManager.getPermissionInfo v kódu.
  • Normální oprávnění se nezobrazují na obrazovce nastavení aplikace.
  • Při používání knihoven zkontrolujte výsledný manifest přes Manifest Merger.

Vyvineme mobilní aplikaci na klíč

IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.

Prodiskutovat projekt

Přečtěte si také