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íapodpisová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 donormálníchaninebezpeč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
}