0Pricing
Android Academy · Lezione

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_GRANTED

Tenere 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 rememberLauncherForActivityResult con il contratto RequestPermission
  • Verifichi prima, quindi chiami launcher.launch(permission)
  • Tenga traccia dello stato della concessione nello state per guidare l'interfaccia
  • Utilizzi RequestMultiplePermissions per 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

  1. Il modello delle autorizzazioni Android
  2. Richiedere autorizzazioni in Compose
  3. Gestire rifiuti e motivazioni
  4. Buone pratiche per la privacy
← Torna a Android Academy