Sobes.tech
Junior

Quali tipi di permessi (permissions) esistono in Android?

sobes.tech AI

Risposta dell'AI

Su Android, esistono diversi tipi di autorizzazioni che determinano i livelli di accesso dell'applicazione alle risorse protette e ai dati dell'utente.

  • Permessi normali: Permessi con rischio minimo. Vengono concessi automaticamente all'installazione dell'app e non richiedono il consenso esplicito dell'utente durante l'esecuzione. Ad esempio, accesso a internet (android.permission.INTERNET).
  • Permessi pericolosi: Permessi ad alto rischio. Richiedono il consenso esplicito dell'utente durante l'esecuzione dell'app. L'accesso a queste risorse può influire sulla privacy o sul funzionamento del dispositivo. Ad esempio, accesso ai contatti (android.permission.READ_CONTACTS), alla fotocamera (android.permission.CAMERA).
  • Permessi di firma: Permessi che possono essere concessi alle applicazioni firmate con lo stesso certificato dell'app che definisce il permesso. Utilizzati per controllare l'accesso tra componenti di un sistema o di un insieme di applicazioni.
  • Permessi di firma o di sistema: Questi permessi possono essere concessi sia alle applicazioni firmate con lo stesso certificato, sia alle applicazioni presenti nella sezione di sistema.

Inoltre, si possono distinguere:

  • Permessi al momento dell'installazione: Permessi richiesti e concessi durante l'installazione dell'app. Includono permessi normali e di firma.
  • Permessi in tempo di esecuzione: Permessi richiesti durante l'esecuzione su dispositivi con Android 6.0 (API livello 23) e superiori. Includono permessi pericolosi.
  • Permessi speciali: Una classe speciale di permessi che richiedono passaggi specifici per essere concessi. Ad esempio, sovrapposizione su altre finestre (SYSTEM_ALERT_WINDOW) o modifica delle impostazioni di sistema (WRITE_SETTINGS). Non appartengono né a normale né a pericoloso.

Nel manifesto dell'app vengono richiesti tutti i permessi necessari:

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

La richiesta di permessi pericolosi viene effettuata durante l'esecuzione:

// Esempio di richiesta di permesso per leggere i contatti
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 {
    // Il permesso è già stato concesso, si può eseguire l'operazione
}