Al igual que en un teléfono, acceder a hardware sensible, como la cámara y el micrófono de los lentes de audio y los lentes con pantalla, requiere el consentimiento explícito del usuario. Estos se consideran permisos específicos para anteojos, y tu app debe solicitarlos en el tiempo de ejecución, incluso si ya tiene los permisos correspondientes en el teléfono.
Declara los permisos en el manifiesto de tu app
Antes de solicitar permisos, debes declararlos en el archivo de manifiesto de tu app con el elemento <uses-permission>. Esta declaración sigue siendo la misma, ya sea que el permiso sea para una función específica del teléfono o de los lentes, pero debes solicitarlo de forma explícita para el hardware o la funcionalidad específicos de los lentes.
<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 el selector de permisos
Para solicitar permisos para anteojos de audio y anteojos con pantalla, primero debes usar ActivityResultLauncher con el método ProjectedPermissionsResultContract para registrar el selector de permisos.
// 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 } }
Puntos clave sobre el código
- El código crea un
ActivityResultLaunchercon el métodoProjectedPermissionsResultContract. La devolución de llamada recibe un mapa de los nombres de los permisos y su estado de concesión. - Debes especificar qué permisos requiere tu app, como
Manifest.permission.CAMERAoManifest.permission.RECORD_AUDIO.
Crea la función de solicitud
A continuación, crearás una función que use el selector de permisos de tu app para solicitar los permisos al usuario durante el tiempo de ejecución.
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)) }
Puntos clave sobre el código
- La función
requestHardwarePermissionscompila un objetoProjectedPermissionsRequestParams. Este objeto agrupa la lista de permisos que necesita tu app y la justificación visible para el usuario. Explica de forma clara y concisa por qué tu app necesita estos permisos. - Llamar a
launchen el selector inicia el flujo de usuarios de solicitud de permisos. - Tu app debe controlar los resultados otorgados y rechazados con facilidad en la devolución de llamada del selector.
Crea la función de verificación de permisos
A continuación, crearás una función que pueda verificar si el usuario otorgó permisos a tu app.
private fun hasCameraPermission(): Boolean { return ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED }
Agrega la lógica de solicitud de permiso
Por último, crea la lógica que usa estas funciones para verificar y solicitar los permisos durante el tiempo de ejecución.
if (hasCameraPermission()) { initializeGlassesFeatures() } else { requestHardwarePermissions() }
Puntos clave sobre el código
- Si el usuario ya otorgó a tu app los permisos necesarios, se llama a la función
initializeGlassesFeaturespara inicializar la experiencia de tu app. Esta función se define como parte de la actividad de tu app para los lentes con IA.
Comprende el flujo de usuarios de la solicitud de permiso
Cuando inicias una solicitud de permiso con el método ProjectedPermissionsResultContract, el sistema inicia un flujo de usuario coordinado en los lentes y el teléfono.
Durante el flujo de usuarios de permisos, esto es lo que pueden esperar tu app y el usuario:
En los lentes: Aparece una actividad en el dispositivo proyectado (lentes) que le indica al usuario que mire su teléfono para continuar.
En el teléfono: De forma simultánea, se inicia una actividad en el dispositivo host (teléfono). En esta pantalla, se muestra la cadena de justificación que proporcionaste y se le da al usuario la opción de continuar o cancelar.
En el teléfono: Si el usuario acepta la explicación, aparecerá en el teléfono un diálogo de permiso del sistema Android modificado que le indicará que está otorgando el permiso para los lentes (no para el teléfono), y el usuario podrá otorgar o rechazar formalmente el permiso.
Recepción del resultado: Después de que el usuario toma su decisión final, se descartan las actividades tanto en el teléfono como en los lentes. Luego, se invoca tu devolución de llamada
ActivityResultLaunchercon un mapa que contiene el estado otorgado para cada permiso solicitado.