Dangerous Permission Androidban: lényeg, engedélyek listája és runtime kérés

Szerző: IT Sectr Megjelenés: 2026-05-20 Olvasási idő: 8 perc

A Dangerous Permission az Android engedélyek egy kategóriája, amelyek explicit felhasználói hozzájárulást igényelnek runtime dialóguson keresztül az alkalmazás működése során. A Android Developer Guide, 2024 szerint a veszélyes engedélyek ProtectionLevel dangerous szinttel rendelkeznek és hozzáférést biztosítanak bizalmas adatokhoz: kamera, mikrofon, geolokáció és névjegyek. A felhasználó explicit hozzájárulása nélkül az alkalmazás nem használhatja ezeket a funkciókat.

Főbb pontok

  • Dangerous Permission — Android engedélyek ProtectionLevel dangerous szinttel, runtime kérést igényelnek.
  • A kérés a ActivityCompat.requestPermissions segítségével történik onRequestPermissionsResult feldolgozással.
  • A felhasználó bármikor visszavonhatja a veszélyes engedélyt az alkalmazás Beállítások menüjében.
  • A kérés előtt ellenőrizni kell az állapotot a ContextCompat.checkSelfPermission segítségével.
  • A lista tartalmazza a CAMERA, RECORD_AUDIO, ACCESS_FINE_LOCATION, READ_CONTACTS és más engedélyeket.

Mi a Dangerous Permission Androidban

Dangerous Permission az Android rendszerengedélyek egy kategóriája, amely hozzáférést biztosít a felhasználó bizalmas adataihoz. A normál engedélyektől eltérően a veszélyes engedélyek nem adódnak ki automatikusan telepítéskor — az alkalmazásnak explicit módon kell kérnie azokat futásidőben az Android 6.0 Marshmallow (API 23) által bevezetett runtime mechanizmuson keresztül.

Az explicit kérés szükségessége az engedélyek által védett adatok természetéből fakad: a felhasználó geolokációja, személyes névjegyei, kamera és mikrofon tartalma, hívás- és SMS előzmények. Az Android ezeket az adatokat érzékenynek tekinti, és tudatos felhasználói hozzájárulást követel. A Android Privacy Sandbox (2024) szerint a felhasználók átlagosan a runtime kérések körülbelül 30 százalékát utasítják el.

A Dangerous Permission legfontosabb jellemzője — a visszavonhatóság bármikor. A felhasználó beléphet a Beállítások — Alkalmazások — Engedélyek menübe és átkapcsolhatja a kapcsolót bármely veszélyes engedélyhez. Az alkalmazásnak fel kell készülnie arra, hogy a megadott engedély bármikor visszavonható újraindítás nélkül.

ProtectionLevel dangerous

A dangerous védelmi szint az engedélyek rendszerdefinícióiban van beállítva OS szinten. Amikor az alkalmazás uses-permission-t deklarál ilyen protectionLevel-lel, a rendszer megjelöli az engedélyt runtime kérést igénylőként. A normal-tól eltérően a dangerous engedélyek mindig megjelennek a rendszer engedélykezelő felületén és visszavonhatók.

Permission Group és Dangerous

Az összes veszélyes engedély funkcionális jellemző szerint Permission Group-okba van csoportosítva. Például a CAMERA és CAMERA2 a CAMERA csoportban, az ACCESS_FINE_LOCATION és ACCESS_COARSE_LOCATION — a LOCATION csoportban található. Ha a felhasználó megadott egy engedélyt a csoportból, a csoport többi engedélye automatikusan megadásra kerül további dialógus nélkül.

Hogyan működik a runtime kérés

A runtime kérés az a mechanizmus, amelyben az alkalmazás meghívja a rendszer API-t egy engedélykérő dialógus megjelenítéséhez. A felhasználó egy modális ablakot lát az engedély nevével és az Allow és Deny gombokkal. A válasz után a rendszer meghívja az onRequestPermissionsResult callback-et az eredménnyel.

A teljes ciklus három lépésből áll: állapot ellenőrzése a checkSelfPermission segítségével, requestPermissions meghívása az engedély hiányában és az eredmény feldolgozása az onRequestPermissionsResult-ban. Az állapot ellenőrzése kötelező, mert a felhasználó bármikor visszavonhatja az engedélyt a beállításokon keresztül, és a funkció ellenőrzés nélküli meghívása SecurityException-hez vezet.

kotlin
fun checkAndRequestCameraPermission() {
    when {
        ContextCompat.checkSelfPermission(
            this,
            Manifest.permission.CAMERA
        ) == PackageManager.PERMISSION_GRANTED -> {
            openCamera()
        }
        else -> {
            ActivityCompat.requestPermissions(
                this,
                arrayOf(Manifest.permission.CAMERA),
                REQUEST_CAMERA_CODE
            )
        }
    }
}

Az eredmény feldolgozása az ActivityResultLauncher-ben vagy az onRequestPermissionsResult-ban történik. Az ajánlott modern megközelítés — a ActivityResultContracts.RequestPermission használata, amely tisztább API-t biztosít explicit kéréskódok nélkül. Ez a szerződés Boolean-t ad vissza — hogy az engedély meg lett-e adva vagy sem.

Legjobb gyakorlatok a kéréshez

A veszélyes engedélyeket szigorúan a funkció használatának kontextusában kérje, ne az alkalmazás indításakor. Ha a felhasználó a kamera gombra nyomott — kérjen CAMERA-t. Ha megnyitotta a térképet — kérjen LOCATION-t. A kontextuális kérés kétszer annyi jóváhagyást eredményez, mint az összes engedély kérése az első indításkor. Szintén ajánlott egyszerre legfeljebb egy engedélyt kérni, hogy a felhasználó megértse, melyik funkció igényel hozzáférést.

Veszélyes engedélyek listája Androidban

Az Android meghatározza a veszélyes engedélyek több csoportját, amelyek mindegyike egy vagy több konstanst tartalmaz. A legteljesebb lista a Manifest.permission osztályban található. Alább a főbb csoportok és a fejlesztésben használt engedélyek láthatók.

Permission Group csoportEngedélyekHozzáférés API
CAMERACAMERACamera API, CameraX
LOCATIONACCESS_FINE_LOCATION, ACCESS_COARSE_LOCATIONFusedLocationProvider, Geofence
MICROPHONERECORD_AUDIOMediaRecorder, AudioRecord
PHONEREAD_PHONE_STATE, CALL_PHONE, READ_CALL_LOGTelephonyManager
CONTACTSREAD_CONTACTS, WRITE_CONTACTS, GET_ACCOUNTSContactsContract
SMSREAD_SMS, SEND_SMS, RECEIVE_SMSSmsManager
STORAGEREAD_EXTERNAL_STORAGE, WRITE_EXTERNAL_STORAGEMediaStore, File API
CALENDARREAD_CALENDAR, WRITE_CALENDARCalendarContract

Új engedélyek Android 12+ rendszerben

Android 12-től kezdve a Google szigorította egyes engedélyekre vonatkozó követelményeket. Például a BLUETOOTH_CONNECT és a BLUETOOTH_SCAN veszélyessé váltak és runtime kérést igényelnek. Megjelent a BODY_SENSORS_BACKGROUND engedély is az érzékelők háttérbeli hozzáféréséhez. A fejlesztőknek frissíteniük kell a targetSdkVersion-t és tesztelniük kell a kéréseket az aktuális OS-verziókon.

Engedélyek Android 13+ rendszerhez

Az Android 13 (API 33) új engedélyeket vezetett be az értesítésekhez (POST_NOTIFICATIONS) és a médiafájlokhoz (READ_MEDIA_IMAGES, READ_MEDIA_VIDEO, READ_MEDIA_AUDIO), felváltva az általános READ_EXTERNAL_STORAGE-t. Most a fényképekhez, videókhoz és hangfájlokhoz való hozzáférést külön kell kérni specializált engedélyeken keresztül, egyetlen dialógus nélkül.

Dangerous vs Normal Permission

A Dangerous és Normal Permission alapvetően különbözik a megadás módjában, a visszavonhatóságban és az UX-ben. A Normal automatikusan kiadódik telepítéskor, a Dangerous explicit runtime dialógust igényel. A Normal nem vonható vissza a beállításokon keresztül, a Dangerous bármikor kikapcsolható. Ez az aszimmetria különböző fejlesztési mintákat eredményez.

A kód szempontjából a veszélyes engedélyek több munkát igényelnek: checkSelfPermission, requestPermissions, visszautasítás kezelése. A Normal-hoz elég egy sor az AndroidManifest.xml-ben. Ugyanakkor a Dangerous Permission kontrollt ad a felhasználónak, ami növeli a bizalmat, különösen az olyan érzékeny funkciók esetében, mint a kamera vagy a geolokáció.

A kategóriák közötti választás nem a fejlesztő előtt áll — azt a rendszer határozza meg. A fejlesztő csak deklarálja a uses-permission-t, a rendszer pedig a protectionLevel alapján határozza meg a kategóriát. Azonban a veszélyes engedélyek kérésének stratégiája befolyásolja a felhasználói élményt: a gyakori vagy nem megfelelő dialógusok csökkentik az alkalmazás értékelését.

Engedélyek kérése Kotlinban

A modern módszer az engedélyek kérésére Kotlinban — az ActivityResultContracts.RequestMultiplePermissions vagy RequestPermission használata. Ezek a szerződések az androidx.activity könyvtár részét képezik, és tiszta, lambda-alapú API-t biztosítanak anélkül, hogy felül kellene írni az onRequestPermissionsResult-t.

kotlin
class CameraActivity : AppCompatActivity() {
    private val requestPermissionLauncher =
        registerForActivityResult(
            ActivityResultContracts.RequestPermission()
        ) { isGranted: Boolean ->
            if (isGranted) {
                openCamera()
            } else {
                showPermissionDeniedMessage()
            }
        }

    fun requestCamera() {
        when {
            ContextCompat.checkSelfPermission(
                this,
                Manifest.permission.CAMERA
            ) == PackageManager.PERMISSION_GRANTED ->
                openCamera()
            ActivityCompat.shouldShowRequestPermissionRationale(
                this,
                Manifest.permission.CAMERA
            ) ->
                showRationaleDialog()
            else ->
                requestPermissionLauncher.launch(
                    Manifest.permission.CAMERA
                )
        }
    }
}

Több engedély egyidejű kérése

Amikor az alkalmazásnak egyszerre több veszélyes engedélyre van szüksége, használja a RequestMultiplePermissions-t. A szerződés Map<String, Boolean> értéket ad vissza, ahol a kulcs az engedély neve, az érték pedig az eredmény. Ez kényelmes az első indításkor, amikor CAMERA és RECORD_AUDIO szükséges a videofelvételhez.

Az első visszautasítás kezelése

Ha a felhasználó elutasította a kérést, a shouldShowRequestPermissionRationale metódus true-t ad vissza. Ez egy jelzés, hogy magyarázatot jelenítsen meg arról, miért van szükség az engedélyre. A legjobb gyakorlat — egy egyéni dialógus megjelenítése magyarázattal és egy Újra gombbal. Ha a felhasználó újra elutasította a kérést a Never Ask Again jelölőnégyzettel, a shouldShowRequestPermissionRationale false-t ad vissza, és át kell irányítani a Beállításokba.

Visszautasítás és Never Ask Again kezelése

A Never Ask Again egy jelző, amelyet a felhasználó állíthat be a runtime dialógus ismételt elutasításakor. Ezt követően a szabványos dialógusablak már nem jelenik meg ehhez az engedélyhez. Az egyetlen mód a hozzáférés biztosítására — a felhasználó átirányítása a rendszer alkalmazásbeállításaihoz.

A fejlesztőnek két visszautasítási forgatókönyvet kell megkülönböztetnie: első — amikor a shouldShowRequestPermissionRationale true-t ad vissza (a felhasználó elutasította, de a dialógus még megjeleníthető) és második — amikor a metódus false-t ad vissza (a Never Ask Again aktív vagy az engedélyt szabályzat blokkolja). A második esetben egy Beállítások megnyitása gombot kell megjeleníteni.

kotlin
fun handlePermissionDenied(permission: String) {
    if (ActivityCompat.shouldShowRequestPermissionRationale(
            this, permission
    )) {
        showRationaleDialog(permission)
    } else {
        showSettingsRedirectDialog(permission)
    }
}

private fun showSettingsRedirectDialog(permission: String) {
    AlertDialog.Builder(this)
        .setTitle("A hozzáférés megtagadva")
        .setMessage(
            "Az engedély letiltva. Nyissa meg a beállításokat."
        )
        .setPositiveButton("Beállítások") { _, _ ->
            val intent = Intent(
                Settings.ACTION_APPLICATION_DETAILS_SETTINGS,
                Uri.fromParts(
                    "package", packageName, null
                )
            )
            startActivity(intent)
        }
        .show()
}

Fontos, hogy ne kérje újra az engedélyt, ha a shouldShowRequestPermissionRationale false-t adott vissza. A requestPermissions ismételt meghívása ebben az esetben nem jelenít meg dialógust — az eredmény azonnal DENIED-del érkezik magyarázat nélkül. A felhasználó érthetetlen viselkedéssel szembesül, ami negatívan befolyásolja az alkalmazás használatának élményét.

Gyakran Ismételt Kérdések

Mely engedélyek számítanak veszélyesnek Androidban?

A Dangerous Permission közé tartoznak a ProtectionLevel dangerous engedélyek: CAMERA, RECORD_AUDIO, ACCESS_FINE_LOCATION, READ_CONTACTS, READ_SMS, READ_CALENDAR és mások. A teljes lista a Manifest.permission osztályban érhető el.

Hogyan ellenőrizhető, hogy a veszélyes engedély megadásra került?

Használja a ContextCompat.checkSelfPermission-t, adja át a kontextust és az engedély nevét. A metódus PERMISSION_GRANTED vagy PERMISSION_DENIED értéket ad vissza. Az ellenőrzést minden veszélyes engedélyt igénylő API-hívás előtt el kell végezni.

Mi a Permission Group a veszélyes engedélyekhez?

A Permission Group a kapcsolódó veszélyes engedélyeket csoportosítja. Ha a felhasználó megadott egy engedélyt a csoportból, a többi automatikusan megadásra kerül. Például a LOCATION tartalmazza az ACCESS_FINE_LOCATION és ACCESS_COARSE_LOCATION engedélyeket.

Hogyan kezeljük a Never Ask Again-t?

Ellenőrizze a shouldShowRequestPermissionRationale-t az elutasítás után. Ha a metódus false-t adott vissza és az engedély még mindig nincs megadva — a Never Ask Again aktív. Irányítsa át a felhasználót a Beállításokba egy Intent segítségével ACTION_APPLICATION_DETAILS_SETTINGS paraméterrel.

Szükségesek a veszélyes engedélyek Android 13+ rendszeren?

Igen, továbbra is kötelezőek. Android 13+ rendszeren néhány engedély megváltozott: a POST_NOTIFICATIONS külön runtime engedéllyé vált, a READ_EXTERNAL_STORAGE-t pedig a READ_MEDIA_IMAGES váltotta fel a médiafájlokhoz való pontos hozzáférés érdekében.

Összefoglalás

  • Dangerous Permission — Android engedélyek ProtectionLevel dangerous szinttel, amelyek explicit runtime kérést igényelnek a felhasználótól.
  • A mechanizmus három lépésből áll: checkSelfPermission, requestPermissions és onRequestPermissionsResult.
  • A felhasználó bármikor visszavonhatja a veszélyes engedélyt a rendszerbeállításokon keresztül.
  • Fő csoportok: CAMERA, LOCATION, MICROPHONE, PHONE, CONTACTS, SMS, STORAGE, CALENDAR.
  • ActivityResultContracts.RequestPermission — modern API a kéréshez Kotlinban kéréskódok nélkül.
  • A ShouldShowRequestPermissionRationale segít megkülönböztetni az első elutasítást a Never Ask Again-től.
  • Android 13+ rendszeren új engedélyek jelentek meg: POST_NOTIFICATIONS és READ_MEDIA_IMAGES a STORAGE helyett.

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.

Projekt megbeszélése

Olvassa el is