Sobes.tech
Junior

Jaké typy oprávnění (permissions) existují v Androidu?

sobes.tech AI

Odpověď od AI

V Androidu existuje několik typů oprávnění, která určují úrovně přístupu aplikace k chráněným zdrojům a údajům uživatele.

  • Normální oprávnění: Oprávnění s minimálním rizikem. Jsou automaticky udělována při instalaci aplikace a nevyžadují explicitní souhlas uživatele během běhu. Například přístup k internetu (android.permission.INTERNET).
  • Nebezpečná oprávnění: Oprávnění s vysokým rizikem. Vyžadují explicitní souhlas uživatele během běhu aplikace. Přístup k těmto zdrojům může ovlivnit soukromí nebo funkčnost zařízení. Například přístup ke kontaktům (android.permission.READ_CONTACTS), kameře (android.permission.CAMERA).
  • Podpisová oprávnění: Oprávnění, která mohou být udělena aplikacím podepsaným stejným certifikátem jako aplikace, která oprávnění stanoví. Používají se ke kontrole přístupu mezi komponentami jednoho systému nebo sady aplikací.
  • Podpisové nebo systémové oprávnění: Tato oprávnění mohou být udělena buď aplikacím podepsaným stejným certifikátem, nebo aplikacím nacházejícím se v systémové části.

Kromě toho lze rozlišit:

  • Oprávnění při instalaci: Oprávnění, která jsou žádaná a udělována během instalace aplikace. Patří sem normální a podpisová oprávnění.
  • Oprávnění za běhu: Oprávnění, která jsou žádaná během běhu aplikace na zařízeních s Androidem 6.0 (API level 23) a vyšším. Patří sem nebezpečná oprávnění.
  • Zvláštní oprávnění: Speciální třída oprávnění, která vyžadují speciální kroky k udělení. Například překrývání přes jiné okna (SYSTEM_ALERT_WINDOW) nebo změna systémových nastavení (WRITE_SETTINGS). Nezařazují se do normálních ani nebezpečných.

V manifestu aplikace jsou žádaná všechna potřebná oprávnění:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.myapp">

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.READ_CONTACTS" />
    <uses-permission android:name="android.permission.CAMERA" />

    <application
        ...
        >
        ...
    </application>
</manifest>

Žádost o nebezpečné oprávnění se provádí za běhu:

// Příklad žádosti o oprávnění ke čtení kontaktů
if (ContextCompat.checkSelfPermission(this,
        Manifest.permission.READ_CONTACTS)
    != PackageManager.PERMISSION_GRANTED) {

    ActivityCompat.requestPermissions(this,
        arrayOf(Manifest.permission.READ_CONTACTS),
        MY_PERMISSIONS_REQUEST_READ_CONTACTS)

} else {
    // Oprávnění již bylo uděleno, lze provést operaci
}