Cómo solicitar permisos de hardware para los lentes con IA

Dispositivos de realidad extendida correspondientes
Esta guía te ayuda a crear experiencias para estos tipos de dispositivos de realidad extendida.
Lentes de IA

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

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 requestHardwarePermissions compila un ProjectedPermissionsRequestParams objeto. 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 launch en 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

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:

  1. 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.

  2. 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.

  3. 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.

  4. 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 ActivityResultLauncher con un mapa que contiene el estado otorgado para cada permiso solicitado.