Richiedere autorizzazioni in Compose
Utilizzi le API Accompanist o activity result.
Richiedere autorizzazioni in Compose è una lezione Android Academy gratuita su CoddyKit. Questa è la lezione 2 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Android Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Android Academy include 4 lezioni in totale.
Richiedere autorizzazioni in Compose
In Jetpack Compose, le autorizzazioni in fase di esecuzione si richiedono utilizzando l'Activity Result API, tramite rememberLauncherForActivityResult. In questo modo si evita il vecchio callback onRequestPermissionsResult.
Il contratto RequestPermission
L'Activity Result API utilizza dei contratti che definiscono input e output. ActivityResultContracts.RequestPermission() accetta una stringa che identifica l'autorizzazione e restituisce un risultato di concessione Boolean.
Creare un launcher
rememberLauncherForActivityResult crea un launcher associato alla composizione. Gli si passano il contratto e un callback che riceve il risultato.
val launcher = rememberLauncherForActivityResult(
contract = ActivityResultContracts.RequestPermission()
) { isGranted ->
if (isGranted) {
// permission granted, use the feature
} else {
// permission denied
}
}Avviare la richiesta
Chiami launcher.launch specificando l'autorizzazione desiderata. Il sistema mostra la finestra di dialogo e il callback viene eseguito con la scelta dell'utente.
Button(onClick = {
launcher.launch(Manifest.permission.CAMERA)
}) {
Text("Enable Camera")
}Verificare prima di chiedere
Non avvii una richiesta alla cieca. Verifichi prima se l'autorizzazione è già stata concessa e la richieda solo se non lo è.
val context = LocalContext.current
val alreadyGranted = ContextCompat.checkSelfPermission(
context, Manifest.permission.CAMERA
) == PackageManager.PERMISSION_GRANTEDTenere traccia dello stato in Compose
Mantenga lo stato corrente della concessione nello state, in modo che l'interfaccia possa reagire. Lo aggiorni all'interno del callback del launcher.
var hasCamera by remember {
mutableStateOf(
ContextCompat.checkSelfPermission(
context, Manifest.permission.CAMERA
) == PackageManager.PERMISSION_GRANTED
)
}
val launcher = rememberLauncherForActivityResult(
ActivityResultContracts.RequestPermission()
) { granted -> hasCamera = granted }Richiedere più autorizzazioni
Per richiedere più autorizzazioni contemporaneamente, utilizzi il contratto RequestMultiplePermissions. Il callback riceve una mappa che associa ogni autorizzazione al relativo stato di concessione.
val multi = rememberLauncherForActivityResult(
ActivityResultContracts.RequestMultiplePermissions()
) { results ->
val fineLocation = results[Manifest.permission.ACCESS_FINE_LOCATION] == true
}
multi.launch(
arrayOf(
Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.ACCESS_COARSE_LOCATION
)
)Guidare l'interfaccia dallo state
Mostri contenuti diversi in base allo stato della concessione: se l'autorizzazione è stata concessa, mostri la funzionalità; altrimenti mostri un pulsante per richiederla. In questo modo la schermata rimane reattiva e chiara.
if (hasCamera) {
CameraPreview()
} else {
Button(onClick = { launcher.launch(Manifest.permission.CAMERA) }) {
Text("Grant camera access")
}
}L'opzione Accompanist Permissions
La libreria Accompanist Permissions offre helper di livello più alto come rememberPermissionState. Molti team preferiscono utilizzare direttamente l'Activity Result API per evitare una dipendenza aggiuntiva; entrambe le opzioni sono valide.
Non richiedere autorizzazioni all'avvio
Eviti di inviare una richiesta di autorizzazione nell'istante in cui appare una schermata. Attenda che l'utente tocchi un'azione che ne abbia chiaramente bisogno. Le richieste contestuali ottengono percentuali di concessione molto più elevate.
Ricordare le modifiche di configurazione
rememberLauncherForActivityResult sopravvive alla ricomposizione e il framework Activity Result consegna correttamente i risultati anche attraverso modifiche di configurazione come la rotazione. Non deve gestire personalmente questa infrastruttura.
Verifica rapida
Verifichi la sua comprensione della richiesta delle autorizzazioni.
Riepilogo
Ha imparato a richiedere le autorizzazioni nel modo moderno:
- Utilizzi
rememberLauncherForActivityResultcon il contrattoRequestPermission - Verifichi prima, quindi chiami
launcher.launch(permission) - Tenga traccia dello stato della concessione nello state per guidare l'interfaccia
- Utilizzi
RequestMultiplePermissionsper richiederne diverse contemporaneamente
Prossimo argomento: gestire i rifiuti e mostrare una motivazione.
Domande Frequenti
La lezione «Richiedere autorizzazioni in Compose» è gratuita?
Sì — il testo completo di «Richiedere autorizzazioni in Compose» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Android Academy, passa a CoddyKit PRO. Il corso Android Academy include 4 lezioni in totale.
Cosa imparerò in «Richiedere autorizzazioni in Compose»?
Utilizzi le API Accompanist o activity result. Eserciti Android Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Android Academy?
Non è richiesta alcuna esperienza precedente. Android Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 2 di 4.
Quanto tempo richiede la lezione «Richiedere autorizzazioni in Compose»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Android Academy?
Sì. Ogni lezione Android Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Il modello delle autorizzazioni Android
- Richiedere autorizzazioni in Compose
- Gestire rifiuti e motivazioni
- Buone pratiche per la privacy