Permission Group v Androidu — co to je, skupiny oprávnění a princip fungování

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

Permission Group je mechanismus seskupování oprávnění v Androidu, který kombinuje funkčně související nebezpečná oprávnění do jedné logické kategorie. Podle Android Permissions Overview, 2024, skupiny oprávnění zjednodušují uživatelské rozhraní: pokud uživatel udělil jedno oprávnění ze skupiny, ostatní jsou automaticky udělena bez dalších dialogů. To snižuje počet žádostí a zlepšuje UX.

Hlavní body

  • Permission Group — kategorie kombinující funkčně související nebezpečná oprávnění Androidu.
  • Udělení jednoho oprávnění ze skupiny automaticky uděluje všechna ostatní bez dalšího dialogu.
  • Skupiny se používají pouze pro dangerous oprávnění — normal oprávnění se neseskupují.
  • Systémové skupiny: CAMERA, LOCATION, MICROPHONE, PHONE, CONTACTS, SMS, STORAGE, CALENDAR.
  • Skupiny jsou definovány v /etc/permissions/ na zařízení a nemohou být vytvořeny vývojářem.

Co je Permission Group v Androidu

Permission Group — je systémový mechanismus Androidu, který kombinuje několik nebezpečných oprávnění do jedné skupiny na základě jejich funkčního účelu. Každá skupina má řetězcový identifikátor, například android.permission-group.CAMERA nebo android.permission-group.LOCATION. Všechna oprávnění v rámci jedné skupiny jsou logicky propojena a poskytují přístup k příbuzným funkcím zařízení.

Skupiny oprávnění se objevily v Android 6.0 Marshmallow spolu s modelem žádostí za běhu. Jejich hlavním účelem je zjednodušit interakci s uživatelem: místo série dialogů pro každé jednotlivé oprávnění systém zobrazuje jeden dialog na skupinu. Pokud uživatel udělil jedno oprávnění ze skupiny, ostatní jsou považovány za automaticky schválené. Podle Android UX Research (2015) to snížilo počet odmítnutí při prvním spuštění o 20 procent.

Je důležité pochopit, že vývojář nemůže vytvářet vlastní Permission Group. Skupiny jsou předdefinovány na úrovni operačního systému a popsány v souborech permissions.xml na každém zařízení. Aplikace pouze specifikuje uses-permission a systém automaticky přiřadí oprávnění k jeho skupině na základě protectionLevel a kategorizace v AOSP.

Jak systém určuje skupinu

Přiřazení oprávnění ke skupině probíhá prostřednictvím atributu permissionGroup v systémové definici oprávnění. Například CAMERA je deklarováno s permissionGroup="android.permission-group.CAMERA", ACCESS_FINE_LOCATION — s permissionGroup="android.permission-group.LOCATION". Toto mapování je pevně stanoveno v kódu Android Open Source Project a je stejné na všech certifikovaných zařízeních.

Jak fungují Permission Group

Mechanismus skupin funguje na principu „jeden dialog na skupinu”. Když aplikace poprvé žádá o jakékoli nebezpečné oprávnění, systém zkontroluje jeho Permission Group. Pokud dosud nebylo uděleno žádné oprávnění z této skupiny — zobrazí se dialog. Po souhlasu systém označí celou skupinu jako udělenou a následné žádosti o jiná oprávnění ze stejné skupiny jsou splněny bez uživatelského rozhraní.

Algoritmus zjednodušeně vypadá následovně:

  • Aplikace volá requestPermissions pro ACCESS_FINE_LOCATION
  • Systém určí skupinu — android.permission-group.LOCATION
  • Zkontroluje, zda byla skupina LOCATION již dřúveve udělena
  • Pokud ne — zobrazí dialog s názvem skupiny a seznamem zahrnutých oprávnění
  • Po Allow — celá skupina LOCATION je považována za udělenou
  • ACCESS_COARSE_LOCATION je nyní k dispozici bez další žádosti

Tento mechanismus se vztahuje pouze na nebezpečná oprávnění. Normální oprávnění nemají skupiny a neúčastní se této logiky. Privilegovaná a podepsaná oprávnění se také neseskupují — mají samostatný systém řízení přístupu.

Omezení skupinové logiky

Skupiny nefungují opačným směrem: odvolání jednoho oprávnění ze skupiny prostřednictvím nastavení odvolá pouze toto oprávnění, aniž by ovlivnilo ostatní. Pokud uživatel odmítl dialog pro skupinu, neblokuje to ostatní skupiny — každé nové oprávnění z jiné skupiny zobrazí vlastní dialog. Permission Group ovlivňuje pouze UX žádosti, nikoli bezpečnostní model.

Seznam Permission Group v Androidu

Android definuje následující systémové Permission Groups pro nebezpečná oprávnění. Každá skupina zahrnuje jedno nebo více oprávnění spojených společným funkčním účelem.

Identifikátor skupinyOprávnění ve skupiněPopis
CAMERACAMERAPřístup kameře zařízení
LOCATIONACCESS_FINE_LOCATION, ACCESS_COARSE_LOCATIONGeolokace (přesná a přibližná)
MICROPHONERECORD_AUDIONahrávání zvuku z mikrofonu
PHONEREAD_PHONE_STATE, CALL_PHONE, READ_CALL_LOG, WRITE_CALL_LOG, ADD_VOICEMAIL, USE_SIPTelefonní funkce
CONTACTSREAD_CONTACTS, WRITE_CONTACTS, GET_ACCOUNTSPřístup ke kontaktům a účtům
SMSREAD_SMS, SEND_SMS, RECEIVE_SMS, RECEIVE_WAP_PUSH, RECEIVE_MMSOdesílání a příjem SMS
STORAGEREAD_EXTERNAL_STORAGE, WRITE_EXTERNAL_STORAGEČtení a zápis externího úložiště
CALENDARREAD_CALENDAR, WRITE_CALENDARPřístup ke kalendáři
SENSORSBODY_SENSORSTělesné senzory (puls a další)
ACTIVITY_RECOGNITIONACTIVITY_RECOGNITIONRozpoznávání fyzické aktivity

Změny v nových verzích

V Android 13 (API 33) se objevila nová skupina NEARBY_DEVICES, kombinující BLUETOOTH_SCAN, BLUETOOTH_CONNECT a BLUETOOTH_ADVERTISE. Také skupina STORAGE byla částečně nahrazena mediálními oprávněními READ_MEDIA_IMAGES, READ_MEDIA_VIDEO a READ_MEDIA_AUDIO, která nejsou součástí STORAGE, ale jsou nezávislými nebezpečnými oprávněními bez seskupování.

Skupiny pro vlastní oprávnění

Vývojáři mohou deklarovat vlastní oprávnění s vlastními Permission Groups pomocí atributu permissionGroup v manifestu. To však funguje pouze pro vlastní oprávnění stejné aplikace a neovlivňuje systémové UI dialogy. V praxi se vlastní Permission Groups používají zřídka — pro interakci mezi vlastními aplikacemi v jednom zásobníku.

Permission Group a UX

Vliv Permission Group na uživatelský zážitek je významný. Díky seskupování uživatel nevidí 8 samostatných dialogů pro různá oprávnění, ale několik skupinových dialogů. To snižuje kognitivní zátěž a snižuje pravděpodobnost, že uživatel odmítne kritické oprávnění, aniž by pochopil jeho účel.

UX výzkumy ukazují, že skupinové dialogy jsou uživateli vnímány jako transparentnější. Když aplikace žádá o „přístup ke kameře”, uživatel chápe kontext. Pokud by každé oprávnění bylo žádáno samostatně — CAMERA, CAMERA2, FLASHLIGHT — vytvořilo by to dojem nadbytečnosti. Permission Group tuto podrobnost abstrahuje.

Nejlepší praxí je žádat o oprávnění pouze z jedné skupiny najednou. Pokud aplikace potřebuje kameru i geolokaci, nežádejte o ně jediným voláním requestPermissions. Nejprve požádejte o jednu skupinu po vysvětlení, poté o druhou. To dává uživateli kontrolu a postupné pochopení každé funkce.

Permission Group vs ProtectionLevel

Permission Group a ProtectionLevel — to jsou dva různé rozměry systému oprávnění Androidu. ProtectionLevel určuje, jak je oprávnění udělováno (normal, dangerous, signature, privileged), zatímco Permission Group je kategorie pro zobrazení v UI. Jsou nezávislé, ale v praxi je kombinace dangerous + permission group nejčastější.

Oprávnění stejného ProtectionLevel mohou patřit do různých skupin. Například ACCESS_FINE_LOCATION a CAMERA mají obě protectionLevel dangerous, ale patří do různých skupin — LOCATION a CAMERA. A naopak, oprávnění se stejným názvem vždy patří do stejné skupiny: ACCESS_FINE_LOCATION a ACCESS_COARSE_LOCATION jsou obě v LOCATION.

Vyšší úrovně ochrany — signature a privileged — nepoužívají Permission Group pro UI. Jejich udělování je řízeno na úrovni systému: signature je udělováno aplikacím podepsaným stejným certifikátem jako systém, a privileged aplikacím v systémovém obrazu. Skupiny pro taková oprávnění existují, ale neovlivňují UX dialogy, protože tyto dialogy jednoduše neexistují.

Kontrola Permission Group v kódu

Vývojář může programově určit Permission Group libovolného oprávnění prostřednictvím PackageManager. Metoda getPermissionInfo vrací PermissionInfo s polem group obsahujícím řetězcový identifikátor skupiny. To je užitečné pro logování, analytiku a vlastní UI obrazovky oprávnění.

kotlin
fun getPermissionGroupName(
    permission: String
): String? {
    return try {
        val pm = packageManager
        val info = pm.getPermissionInfo(
            permission,
            PackageManager.GET_META_DATA
        )
        info.group
    } catch (e: NameNotFoundException) {
        null
    }
}

fun getPermissionsByGroup(
    group: String
): List<String> {
    val pm = packageManager
    val perms = pm.queryPermissionsByGroup(
        group,
        PackageManager.GET_META_DATA
    )
    return perms.map { it.name }
}

Použití v DI a architektuře

Znalost Permission Group pomáhá při budování architektury žádostí. Lze vytvořit abstrakci PermissionGroupProvider, která vrací seznam oprávnění pro konkrétní skupinu. To zjednodušuje testování: v jednotkových testech provider vrací falešná data bez volání PackageManager. V instrumentálních testech — skutečné skupiny ze systému.

PermissionGroupProvider v DI

Integrace PermissionGroupProvider prostřednictvím Dagger Hilt nebo Koin umožňuje centralizované řízení mapování oprávnění a skupin. V provideru lze uložit do mezipaměti výsledek PackageManager.queryPermissionsByGroup, aby se předešlo opakovaným systémovým voláním při každé žádosti. To je důležité zejména pro obrazovky nastavení, kde se zobrazuje úplný seznam oprávnění a jejich stav.

Logování a analytika

Při sběru analytiky o odmítnutích je užitečné logovat nejen název oprávnění, ale také jeho Permission Group. To pomáhá identifikovat funkční oblasti, které způsobují nejvíce odmítnutí. Například skupina LOCATION má tradičně nejvyšší procento odmítnutí — kolem 40 procent, podle statistik Google Play Console.

Analytika podle skupin pomáhá při produktových rozhodnutích: pokud má skupina CONTACTS vysoké procento odmítnutí, možná stojí za to přehodnotit načasování žádosti nebo přidat vysvětlující dialog. Skupinový přístup k analytice poskytuje úplnější obrázek než analýza jednotlivých oprávnění, protože počet odmítnutí pro celou skupinu odráží obecný postoj uživatelů k funkční oblasti.

Často kladené otázky

Co je Permission Group v Androidu?

Permission Group — mechanismus pro kombinování funkčně souvisejících nebezpečných oprávnění do jedné kategorie. Pokud uživatel udělil jedno oprávnění ze skupiny, ostatní jsou automaticky udělena bez dalšího dialogu.

Kolik Permission Group existuje v Androidu?

Ve standardním Androidu je asi 10 hlavních skupin: CAMERA, LOCATION, MICROPHONE, PHONE, CONTACTS, SMS, STORAGE, CALENDAR, SENSORS a ACTIVITY_RECOGNITION. V Android 13+ byla přidána NEARBY_DEVICES.

Může vývojář vytvořit vlastní Permission Group?

Ano, pomocí atributu permissionGroup v AndroidManifest.xml pro vlastní oprávnění. Ale funguje to pouze pro oprávnění v rámci aplikace a neovlivňuje systémové UI dialogy. V praxi se používá zřídka.

Jak skupina ovlivňuje odvolání oprávnění?

Odvolání jednoho oprávnění ze skupiny neodvolává ostatní. Uživatel může zakázat ACCESS_FINE_LOCATION, ale ACCESS_COARSE_LOCATION zůstane aktivní. Skupina ovlivňuje pouze udělování, nikoli odvolávání.

Jak zjistím skupinu libovolného oprávnění?

Použijte PackageManager.getPermissionInfo a přečtěte pole group. Metoda vrací řetězcový identifikátor skupiny, například android.permission-group.CAMERA. Pokud oprávnění nemá skupinu, pole bude null.

Shrnutí

  • Permission Group — mechanismus seskupování nebezpečných oprávnění Androidu pro zjednodušení UX.
  • Udělení jednoho oprávnění ze skupiny automaticky zajistí všechna ostatní ve skupině.
  • Systémové skupiny: CAMERA, LOCATION, MICROPHONE, PHONE, CONTACTS, SMS, STORAGE, CALENDAR, SENSORS.
  • Skupiny neovlivňují odvolání — odvolání jednoho oprávnění neovlivňuje ostatní ve skupině.
  • Vlastní skupiny jsou možné pouze pro oprávnění samotného vývojáře.
  • Skupinu lze zkontrolovat pomocí PackageManager.getPermissionInfo a pole group.
  • V Android 13+ se objevila skupina NEARBY_DEVICES pro Bluetooth a Wi-Fi oprávnění.

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é