Runtime Permission: quali tipi esistono e principio di funzionamento in Android

Autore: IT Sectr Pubblicato: 2026-05-20 Tempo di lettura: 8 min

Runtime Permission è un meccanismo di richiesta dei permessi durante l'esecuzione dell'applicazione, introdotto in Android 6.0 (API 23). A differenza della concessione dei permessi all'installazione, i runtime permissions consentono all'utente di concedere o revocare l'accesso ai dati sensibili (fotocamera, geolocalizzazione, contatti) in qualsiasi momento. Secondo Android Developers (2026), oltre l'85% delle app su Google Play utilizza almeno un runtime permission.

Punti Chiave

  • Runtime Permission è un meccanismo Android che richiede il consenso esplicito dell'utente per accedere ai dati sensibili.
  • Permessi pericolosi sono un gruppo di permessi che richiedono una richiesta in fase di esecuzione (fotocamera, microfono, geolocalizzazione, contatti).
  • Permessi normali sono approvati automaticamente dal sistema e non richiedono una richiesta in fase di esecuzione (INTERNET, ACCESS_NETWORK_STATE).
  • Permessi una tantum sono permessi per una singola sessione, introdotti in Android 11, revocati automaticamente alla chiusura dell'app.
  • shouldShowRequestPermissionRationale è un flag che indica se mostrare una spiegazione all'utente prima della richiesta.

Cos'è Runtime Permission?

Runtime Permission è un modello di sicurezza Android in cui l'app richiede l'accesso ai dati sensibili nel momento in cui quella funzionalità è effettivamente necessaria per l'utente. Prima di Android 6.0, tutti i permessi venivano concessi all'installazione dell'app e l'utente non poteva revocarli senza disinstallare completamente l'app.

Evoluzione del modello di permessi Android

Prima di Android 6.0, l'utente vedeva un elenco di tutti i permessi all'installazione e poteva accettarli tutti o rifiutare l'installazione. Uno studio del 2015 ha mostrato che l'87% degli utenti non legge l'elenco dei permessi all'installazione. Android 6.0 ha introdotto i runtime permissions, suddividendo i permessi in normali (automatici) e pericolosi (con richiesta). Android 11 ha aggiunto i permessi una tantum — revoca automatica alla chiusura dell'app. Android 13 ha introdotto Photo Picker e le notifiche push come runtime permissions separati.

iOS utilizza un modello simile da iOS 10, dove l'accesso a fotocamera, microfono e geolocalizzazione viene richiesto al primo utilizzo. Tuttavia, iOS non ha il concetto di “permessi normali” — ogni permesso viene richiesto esplicitamente e il rifiuto persiste fino a quando lo sviluppatore non lo richiede nuovamente tramite le impostazioni di sistema.

Come funziona Runtime Permission in Android?

Runtime Permission funziona tramite un dialogo di sistema invocato dal metodo requestPermissions() (AndroidX — ActivityResultLauncher). Il sistema mostra un dialogo standard con una spiegazione e l'utente sceglie “Consenti” o “Nega”. Dopo la risposta, viene attivato un callback in cui l'app elabora la decisione dell'utente.

Richiesta di permesso tramite ActivityResultLauncher

kotlin
private lateinit var requestPermissionLauncher: ActivityResultLauncher<String>

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)

    requestPermissionLauncher =
        registerForActivityResult(ActivityResultContracts.RequestPermission()) { isGranted ->
            if (isGranted) {
                startCamera()
            } else {
                showPermissionDeniedDialog()
            }
        }
}

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

Il metodo shouldShowRequestPermissionRationale restituisce true se l'utente ha già rifiutato la richiesta una volta. In questo caso, si consiglia di mostrare un dialogo con una spiegazione del perché l'app ha bisogno del permesso e solo successivamente richiederlo nuovamente. Questo aumenta la probabilità di consenso dell'utente del 30–40% (dati Google I/O 2024).

Tipi di permessi in Android

Android classifica tutti i permessi in diversi livelli di protezione: normali, pericolosi, di firma e speciali. I permessi normali vengono concessi automaticamente all'installazione. I permessi pericolosi richiedono una richiesta in fase di esecuzione. I permessi di firma sono disponibili solo per le app firmate con lo stesso certificato.

Gruppi di permessi pericolosi

GruppoPermessiLivello API
CAMERACAMERAAPI 23+
LOCATIONACCESS_FINE_LOCATION, ACCESS_COARSE_LOCATION, ACCESS_BACKGROUND_LOCATIONAPI 23+ (background — API 29+)
STORAGEREAD_EXTERNAL_STORAGE, WRITE_EXTERNAL_STORAGE, READ_MEDIA_IMAGES (API 33+)API 23+ (modifiche in API 33)
PHONEREAD_PHONE_STATE, CALL_PHONE, READ_CALL_LOGAPI 23+
MICROPHONERECORD_AUDIOAPI 23+
CONTACTSREAD_CONTACTS, WRITE_CONTACTS, GET_ACCOUNTSAPI 23+
NOTIFICATIONSPOST_NOTIFICATIONSAPI 33+

I permessi speciali (SYSTEM_ALERT_WINDOW, WRITE_SETTINGS, MANAGE_EXTERNAL_STORAGE) richiedono una navigazione aggiuntiva alle impostazioni di sistema tramite Settings.ACTION_MANAGE_OVERLAY_PERMISSION. Questi permessi non possono essere richiesti tramite il dialogo di sistema standard e richiedono un'azione esplicita dell'utente nella schermata delle impostazioni.

Richiesta di permessi in Android 12+

Android 12 ha introdotto cambiamenti significativi nel modello dei runtime permissions. I permessi una tantum consentono di concedere l'accesso a fotocamera, microfono o geolocalizzazione solo per una sessione. Non appena l'utente chiude l'app, il permesso viene automaticamente revocato. Gli indicatori di privacy sono indicatori verdi nella barra di stato che mostrano quando un'app sta utilizzando la fotocamera o il microfono.

Gestione dei permessi una tantum

kotlin
// Android 12+ — gestione del permesso una tantum per la posizione
private fun checkLocationPermission() {
    val permissionLauncher =
        registerForActivityResult(ActivityResultContracts.RequestMultiplePermissions()) { permissions ->

        val fineLocationGranted = permissions[Manifest.permission.ACCESS_FINE_LOCATION]
        val coarseLocationGranted = permissions[Manifest.permission.ACCESS_COARSE_LOCATION]

        if (fineLocationGranted == true) {
            showUserLocation()
        } else {
            showLocationDisabledDialog()
        }
    }

    permissionLauncher.launch(
        arrayOf(
            Manifest.permission.ACCESS_FINE_LOCATION,
            Manifest.permission.ACCESS_COARSE_LOCATION
        )
    )
}

// Verificare se il permesso è stato revocato dal sistema (Android 12+)
class PermissionReceiver : BroadcastReceiver() {
    override fun onReceive(context: Context, intent: Intent) {
        if (intent.action == Intent.ACTION_PERMISSION_REVOCATION) {
            handleRevokedPermission(intent.getStringExtra(Intent.EXTRA_REVOKED_PERMISSION))
        }
    }
}

Android 13 ha aggiunto il permesso POST_NOTIFICATIONS al gruppo pericoloso, richiedendo una richiesta esplicita per l'invio di notifiche push. Android 14 ha introdotto restrizioni sulla geolocalizzazione in background: l'app deve ottenere l'approvazione esplicita dell'utente ogni volta che richiede la posizione in background. Photo Picker (API 33+) ha sostituito la necessità di READ_EXTERNAL_STORAGE per la selezione delle immagini.

Gestione dei rifiuti dell'utente

Il rifiuto dell'utente a una richiesta di permesso è una situazione normale che deve essere gestita correttamente. Esistono due tipi di rifiuto: una tantum (l'utente ha premuto “Nega”) e permanente (l'utente ha selezionato “Non chiedere più”). Nel secondo caso, il dialogo di sistema non apparirà più e l'app deve reindirizzare l'utente alle impostazioni di sistema.

Strategia di gestione dei rifiuti

Dopo il primo rifiuto, l'app dovrebbe mostrare un dialogo di giustificazione — una propria spiegazione del perché il permesso è necessario. Se l'utente rifiuta nuovamente, l'app dovrebbe reindirizzare alla schermata delle impostazioni dell'app tramite Settings.ACTION_APPLICATION_DETAILS_SETTINGS. Material 3 consiglia di utilizzare PermissionRequestBottomSheet per un'esperienza utente più naturale.

È importante non bloccare completamente la funzionalità dell'app in caso di rifiuto. Ad esempio, se l'utente ha rifiutato la geolocalizzazione, l'app dovrebbe offrire l'inserimento manuale dell'indirizzo. Per la fotocamera, consentire il caricamento di un'immagine dalla galleria. Google raccomanda di fornire sempre un meccanismo di fallback per tutti i runtime permissions.

Raccomandazioni di sicurezza

I runtime permissions non sono solo un meccanismo tecnico, ma anche un elemento di fiducia dell'utente nell'app. Richiedere un permesso in un momento inappropriato (ad esempio, al primo avvio) riduce significativamente la probabilità di consenso. Google Play Store analizza la frequenza e il contesto delle richieste di permessi: le app con richieste aggressive ottengono posizioni più basse nei risultati di ricerca.

Regole per la richiesta di permessi

Contesto — richiedi il permesso immediatamente prima di eseguire l'azione che lo richiede. Minimo — richiedi solo i permessi effettivamente necessari per il funzionamento della funzionalità. Trasparenza — spiega all'utente perché il permesso è necessario prima del dialogo di sistema. Revoca — iscriviti a ACTION_PERMISSION_REVOCATION per gestire correttamente la revoca dei permessi in fase di esecuzione.

Per testare i runtime permissions, utilizza i comandi adb: adb shell pm revoke <package> android.permission.CAMERA consente di simulare la revoca del permesso senza reinstallare l'app. Espresso e UiAutomator supportano il test dei dialoghi di permesso tramite GrantPermissionRule. L'integrazione di questi strumenti nella pipeline CI/CD è obbligatoria per le app con runtime permissions.

Audit dei permessi in Google Play Console

Google Play Console fornisce una sezione di audit dei permessi, dove gli sviluppatori possono vedere con quale frequenza vengono richiesti i permessi, quale percentuale di utenti concede l'accesso e quali permessi sono stati revocati. L'analisi di questi dati aiuta a identificare le richieste inefficienti e a ottimizzare l'esperienza utente. Ad esempio, se meno del 40% degli utenti concede la geolocalizzazione, considera di rivedere i tempi della richiesta e aggiungere una giustificazione più convincente.

L'uso di Android Vitals per monitorare gli ANR (Application Not Responding) relativi ai permessi è anche fondamentale. Se una richiesta di permesso viene eseguita sul thread principale o il dialogo di sistema blocca l'interfaccia utente, potrebbe causare ANR su dispositivi lenti. Sposta la verifica e la richiesta dei permessi in un thread separato o utilizza le coroutine Kotlin per la gestione asincrona per evitare di bloccare l'interfaccia utente.

Domande Frequenti

Come distinguere un rifiuto una tantum da uno permanente?

shouldShowRequestPermissionRationale restituisce false in caso di rifiuto permanente (quando l'utente ha selezionato “Non chiedere più”). Il metodo restituisce true in caso di rifiuto una tantum, consentendo di mostrare un dialogo di giustificazione. Se il metodo restituisce false, l'unica opzione è reindirizzare l'utente alle impostazioni di sistema.

Si possono richiedere più permessi contemporaneamente?

Sì, ActivityResultContracts.RequestMultiplePermissions consente di richiedere un array di permessi in una singola chiamata. Il sistema mostrerà sequenzialmente i dialoghi per ogni permesso. Si consiglia di raggruppare i permessi logicamente correlati (ad esempio, CAMERA e RECORD_AUDIO per la registrazione video), ma non richiederne più di 2–3 alla volta.

Come funzionano i runtime permissions su Android TV e Wear OS?

Android TV utilizza lo stesso modello di runtime permissions con dialoghi visualizzati sullo schermo del televisore. Wear OS versione 3+ supporta i runtime permissions, ma i dialoghi vengono visualizzati sull'orologio. Per Android Auto, tutti i permessi vengono richiesti sul telefono e il sistema dell'auto riceve i permessi già approvati tramite una connessione bridge.

Quali cambiamenti nei permessi sono previsti in Android 16?

Secondo informazioni preliminari, Android 16 introduce la “scadenza dei permessi” per i permessi una tantum con revoca automatica dopo 24 ore. Sono previsti anche requisiti più severi per la posizione in background e un elenco ampliato di permessi pericolosi per nuove categorie (sensori ambientali, scansione Wi-Fi). I dettagli esatti appariranno nel terzo trimestre del 2027.

Qual è la differenza tra runtime permission su Android e iOS?

iOS non supporta i “permessi normali” — ogni permesso viene richiesto esplicitamente tramite un dialogo di sistema. L'utente può revocare il permesso in qualsiasi momento tramite le impostazioni. La differenza principale è che iOS non verifica preventivamente lo stato del permesso tramite un equivalente di checkSelfPermission: il sistema mostra automaticamente un dialogo al primo accesso a un'API protetta.

Riepilogo

  • Runtime Permission è un meccanismo per richiedere dati sensibili al momento dell'utilizzo effettivo, introdotto in Android 6.0.
  • I permessi pericolosi richiedono un dialogo di sistema esplicito; i permessi normali vengono approvati automaticamente.
  • I permessi una tantum (Android 12+) vengono revocati alla chiusura dell'app, migliorando la privacy dell'utente.
  • shouldShowRequestPermissionRationale determina se c'è stato un rifiuto precedente e aiuta a scegliere la strategia di richiesta.
  • Android 13 ha aggiunto POST_NOTIFICATIONS come runtime permission; Android 14 ha inasprito i requisiti per la geolocalizzazione in background.
  • Photo Picker (API 33+) sostituisce la necessità di READ_EXTERNAL_STORAGE per la selezione delle immagini.
  • Fornisci sempre un piano di fallback in caso di rifiuto dell'utente — un modo alternativo per inserire dati o selezionare manualmente.

Svilupperemo un'applicazione mobile chiavi in mano

IT Sectr crea applicazioni iOS e Android per startup e aziende dal 2017. Ti consulteremo e ti proporremo la soluzione migliore.

Discuti il progetto

Leggi anche