Proprio come su uno smartphone, l'accesso a hardware sensibile come la fotocamera e il microfono su occhiali audio e occhiali con display 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 file 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, ma
devi comunque richiederla esplicitamente per l'hardware o
la funzionalità specifica 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>
Prima di richiedere le autorizzazioni per gli occhiali
Esamina i principi e i flussi di lavoro delle autorizzazioni per assicurarti di offrire la migliore esperienza ai tuoi utenti, ad esempio controllando se l'utente ha già concesso le autorizzazioni di runtime richieste dalla tua app e se la tua app deve mostrare una motivazione all'utente prima di richiedere autorizzazioni specifiche per gli occhiali.
Scenari delle autorizzazioni
Esistono diversi scenari che potresti incontrare quando richiedi autorizzazioni di runtime pericolose su occhiali audio e con display:
- Richiedere le autorizzazioni di runtime da un'attività proiettata
- Richiedere le autorizzazioni di runtime da un'attività dello smartphone
Per informazioni dettagliate su ogni scenario, consulta le sezioni seguenti di questa guida.
Richiedi le autorizzazioni di runtime da un'attività proiettata
Per richiedere le autorizzazioni di runtime per gli occhiali audio o di visualizzazione da un'attività
proiettata, utilizza il metodo ProjectedActivityCompat.requestPermissions.
La chiamata di questo metodo attiva un flusso utente coordinato sia sugli occhiali sia sullo smartphone host.
- Sugli occhiali: il sistema apre un'attività complementare proiettata sugli occhiali, che indica all'utente di controllare lo smartphone per rispondere alla richiesta di autorizzazione.
- Sullo smartphone: sullo schermo dello smartphone viene visualizzata una finestra di dialogo di autorizzazione del sistema Android. La finestra di dialogo indica esplicitamente che l'utente sta concedendo l'autorizzazione per gli occhiali anziché per lo smartphone. L'utente può quindi concedere o rifiutare la richiesta.
L'esempio seguente mostra come richiedere le autorizzazioni per gli occhiali da un'attività proiettata:
@RequiresApi(Build.VERSION_CODES.VANILLA_ICE_CREAM) private fun requestCameraPermission() { lifecycleScope.launch { try { ProjectedActivityCompat.requestPermissions( this@PermissionsFromProjectedActivity, arrayOf(Manifest.permission.CAMERA), // CAMERA_PERMISSION_REQUEST_CODE is a developer defined constant CAMERA_PERMISSION_REQUEST_CODE, ) } catch (e: IllegalStateException) { // Thrown when the projected system service can't be bound. Log.e(TAG, "Camera permission request failed: projected service unavailable.", e) } } }
Punti chiave sul codice
- Utilizza
ProjectedActivityCompat.requestPermissionsanziché il metodo standardActivityCompat. Questo metodo ha come target esplicito le autorizzazioni di runtime per l'audio e gli occhiali con display, anziché lo smartphone host.
Gestisci i risultati delle autorizzazioni
Una volta che l'utente risponde alla finestra di dialogo delle autorizzazioni sullo smartphone, la sua decisione viene
comunicata alla tua app richiamando il callback onRequestPermissionsResult.
Il sistema chiude automaticamente l'attività complementare proiettata. Sugli occhiali audio, questo avviene dopo la riproduzione dell'avviso audio. Sugli occhiali con display, succede dopo che l'utente ha risposto a tutte le finestre di dialogo relative alle autorizzazioni.
Per gestire la risposta, esegui l'override di onRequestPermissionsResult() all'interno dell'istanza Activity che ha avviato la richiesta di autorizzazione.
Il seguente snippet di codice mostra come gestire il callback e verificare se l'utente ha concesso le autorizzazioni richieste:
@RequiresApi(Build.VERSION_CODES.VANILLA_ICE_CREAM) override fun onRequestPermissionsResult( requestCode: Int, permissions: Array<String>, grantResults: IntArray, deviceId: Int, ) { super.onRequestPermissionsResult(requestCode, permissions, grantResults, deviceId) if (requestCode != CAMERA_PERMISSION_REQUEST_CODE) return val isCameraGranted = grantResults.getOrNull(permissions.indexOf(Manifest.permission.CAMERA)) == PackageManager.PERMISSION_GRANTED if (isCameraGranted) { initializeCameraFeatures() } else { onCameraPermissionDenied() } }
Punti chiave sul codice
- Utilizza l'overload
deviceIdcon il callbackonRequestPermissionsResultper assicurarti che lo stato dell'autorizzazione sia mappato correttamente al contesto specifico, ad esempio gli occhiali audio o con display anziché lo smartphone host. - La tua app deve gestire correttamente sia i risultati concessi che quelli negati.
Richiedere autorizzazioni di runtime in un'attività dello smartphone
Se la tua app è in esecuzione in un'attività dello smartphone, ma richiede autorizzazioni per gli occhiali audio o
display, ad esempio per consentire a un utente di passare da uno stream video alla fotocamera degli occhiali
per una visuale in prima persona, richiedi le autorizzazioni utilizzando il metodo
Activity#requestPermissions(permissions, requestCode,
deviceId) specifico per il dispositivo:
// Request the projected permission from phone activity requestPermissions( arrayOf(Manifest.permission.CAMERA), // REQUEST_CODE_GLASSES_CAMERA is a developer-defined constant REQUEST_CODE_GLASSES_CAMERA, projectedDeviceId )
Punti chiave sul codice
- Per scegliere come target gli occhiali audio e display, ottieni l'ID dispositivo appropriato da un contesto proiettato che hai creato utilizzando
createProjectedDeviceContext. Passa questo ID con la chiamata al metodorequestPermissions.
Gestire i risultati delle autorizzazioni
Una volta che l'utente risponde alla finestra di dialogo delle autorizzazioni sullo smartphone, la sua decisione viene inviata alla tua app richiamando il callback onRequestPermissionsResult.
Per gestire la risposta, esegui l'override di onRequestPermissionsResult all'interno dell'istanza Activity che ha avviato la richiesta di autorizzazione.
Il seguente snippet di codice mostra come gestire il callback e verificare se l'utente ha concesso le autorizzazioni richieste:
@RequiresApi(Build.VERSION_CODES.VANILLA_ICE_CREAM) override fun onRequestPermissionsResult( requestCode: Int, permissions: Array<String>, grantResults: IntArray, deviceId: Int, ) { super.onRequestPermissionsResult(requestCode, permissions, grantResults, deviceId) if (requestCode != CAMERA_PERMISSION_REQUEST_CODE) return val isCameraGranted = grantResults.getOrNull(permissions.indexOf(Manifest.permission.CAMERA)) == PackageManager.PERMISSION_GRANTED if (isCameraGranted) { initializeCameraFeatures() } else { onCameraPermissionDenied() } }
Punti chiave sul codice
- Utilizza l'overload
deviceIdcon il callbackonRequestPermissionsResultper assicurarti che lo stato dell'autorizzazione sia mappato correttamente al contesto specifico, ad esempio gli occhiali audio o di visualizzazione anziché lo smartphone host. - La tua app deve gestire correttamente sia i risultati concessi che quelli negati.