Al igual que en un teléfono, acceder a hardware sensible, como la cámara y el micrófono de los lentes de IA, requiere el consentimiento explícito del usuario. Estos se consideran permisos específicos de los lentes, 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 un teléfono o una función específica de los lentes de IA, 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 los lentes de IA, primero debes usar el
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 elProjectedPermissionsResultContractmétodo. La devolución de llamada recibe un mapa de nombres de permisos a su estado otorgado. - 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 en 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 unProjectedPermissionsRequestParamsobjeto. Este objeto agrupa la lista de permisos que necesita tu app y la explicación para el usuario. Haz que la explicación sea clara y concisa para explicar por qué tu app necesita estos permisos. - Llamar a
launchen el selector activa el flujo de usuarios de solicitud de permisos. - Tu app debe controlar los resultados otorgados y denegados correctamente 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 permisos
Por último, crea la lógica que usa estas funciones para verificar y solicitar los permisos en 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 de IA.
Comprende el flujo de usuarios de solicitud de permisos
Cuando inicias una solicitud de permiso con el
ProjectedPermissionsResultContract método, el sistema inicia un
flujo de usuarios coordinado en los lentes de IA y el teléfono.
Durante el flujo de usuarios de permisos, esto es lo que tu app y el usuario pueden esperar:
En los lentes de IA: Aparece una actividad en el dispositivo proyectado (lentes), que le indica al usuario que mire su teléfono para continuar.
En el teléfono: Al mismo tiempo, se inicia una actividad en el dispositivo host (teléfono). En esta pantalla, se muestra la cadena de explicació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á un diálogo de permisos del sistema Android modificado en el teléfono que le indicará que está otorgando el permiso para el dispositivo de lentes de IA (no el teléfono), y el usuario puede otorgar o denegar formalmente el permiso.
Recibir el resultado: Después de que el usuario toma su decisión final, se descartan las actividades en el teléfono y los lentes de IA. Luego, se invoca la devolución de llamada
ActivityResultLaunchercon un mapa que contiene el estado otorgado para cada permiso solicitado.