Proprio come su uno smartphone, l'accesso a hardware sensibile come la fotocamera e il microfono degli occhiali AI richiede il consenso esplicito dell'utente. Queste sono considerate autorizzazioni specifiche per gli occhiali e la tua app deve richiederle in fase di runtime, anche se dispone già delle autorizzazioni corrispondenti sullo smartphone.
Dichiarare le autorizzazioni nel manifest dell'app
Prima di richiedere le autorizzazioni, devi dichiararle nel file manifest dell'app
utilizzando l'elemento <uses-permission>. Questa dichiarazione rimane la
stessa indipendentemente dal fatto che l'autorizzazione riguardi una funzionalità specifica per lo smartphone o per gli occhiali AI,
ma devi comunque richiederla esplicitamente per l'hardware o la funzionalità specifici per gli occhiali.
<manifest ...>
<!-- Only declare permissions that your app actually needs. In this example,
we declare permissions for the camera. -->
<uses-permission android:name="android.permission.CAMERA"/>
<application ...>
...
</application>
</manifest>
Registra il launcher delle autorizzazioni
Per richiedere le autorizzazioni per gli occhiali AI, devi prima utilizzare
ActivityResultLauncher con il metodo
ProjectedPermissionsResultContract per registrare l'avvio delle autorizzazioni.
// Register the permissions launcher using the ProjectedPermissionsResultContract. private val requestPermissionLauncher: ActivityResultLauncher<List<ProjectedPermissionsRequestParams>> = registerForActivityResult(ProjectedPermissionsResultContract()) { results -> if (results[Manifest.permission.CAMERA] == true) { isPermissionDenied = false initializeGlassesFeatures() } else { // Handle permission denial. isPermissionDenied = true } }
Punti chiave sul codice
- Il codice crea un
ActivityResultLauncherutilizzando il metodoProjectedPermissionsResultContract. Il callback riceve una mappa dei nomi delle autorizzazioni e del loro stato di concessione. - Devi specificare le autorizzazioni richieste dalla tua app, ad esempio
Manifest.permission.CAMERAoManifest.permission.RECORD_AUDIO.
Crea la funzione di richiesta
Successivamente, creerai una funzione che utilizza il launcher delle autorizzazioni della tua app per richiedere le autorizzazioni all'utente in fase di runtime.
private fun requestHardwarePermissions() { val params = ProjectedPermissionsRequestParams( permissions = listOf(Manifest.permission.CAMERA), rationale = "Camera access is required to overlay digital content on your physical environment." ) requestPermissionLauncher.launch(listOf(params)) }
Punti chiave sul codice
- La funzione
requestHardwarePermissionscrea un oggettoProjectedPermissionsRequestParams. Questo oggetto raggruppa l'elenco delle autorizzazioni necessarie alla tua app e la motivazione rivolta agli utenti. Rendi la motivazione chiara e concisa per spiegare perché la tua app ha bisogno di queste autorizzazioni. - La chiamata a
launchnel launcher attiva il flusso utente di richiesta di autorizzazione. - La tua app deve gestire correttamente i risultati concessi e negati nel callback del launcher.
Crea la funzione di controllo delle autorizzazioni
Successivamente, creerai una funzione che può verificare se l'utente ha concesso le autorizzazioni alla tua app.
private fun hasCameraPermission(): Boolean { return ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED }
Aggiungi la logica di richiesta di autorizzazione
Infine, crea la logica che utilizza queste funzioni per verificare e richiedere le autorizzazioni in fase di runtime.
if (hasCameraPermission()) { initializeGlassesFeatures() } else { requestHardwarePermissions() }
Punti chiave sul codice
- Se l'utente ha già concesso alla tua app le autorizzazioni richieste, viene chiamata la funzione
initializeGlassesFeaturesper inizializzare l'esperienza della tua app. Questa funzione è definita come parte dell'attività della tua app per gli occhiali con AI.
Comprendere il flusso utente della richiesta di autorizzazione
Quando avvii una richiesta di autorizzazione utilizzando il metodo
ProjectedPermissionsResultContract, il sistema avvia un flusso utente
coordinato sia sugli occhiali AI sia sullo smartphone.
Durante il flusso utente delle autorizzazioni, ecco cosa possono aspettarsi la tua app e l'utente:
Sugli occhiali AI: un'attività viene visualizzata sul dispositivo proiettato (occhiali), che invita l'utente a guardare lo smartphone per continuare.
Sullo smartphone: contemporaneamente, un'attività viene avviata sul dispositivo host (smartphone). Questa schermata mostra la stringa di motivazione che hai fornito e offre all'utente la possibilità di procedere o annullare.
Sul telefono: se l'utente accetta la motivazione, sullo smartphone viene visualizzata una finestra di dialogo modificata delle autorizzazioni di sistema Android che informa l'utente che sta concedendo l'autorizzazione per gli occhiali AI (non per lo smartphone) e l'utente può concedere o negare formalmente l'autorizzazione.
Ricezione del risultato: dopo che l'utente ha fatto la sua scelta definitiva, le attività sullo smartphone e sugli occhiali AI vengono chiuse. Viene quindi richiamato il callback
ActivityResultLaunchercon una mappa contenente lo stato concesso per ogni autorizzazione richiesta.