En los lentes con audio, el sistema enruta la entrada física (como los gestos del panel táctil o las pulsaciones de botones) según el conocimiento del usuario, en lugar del enfoque de la pantalla visual. Como los usuarios no pueden ver una interfaz de usuario, el sistema enruta la entrada física a la actividad proyectada de cualquier experiencia en la app que el usuario esté percibiendo o con la que esté interactuando de forma activa.
Cómo determina el sistema el conocimiento del usuario
El sistema determina el conocimiento del usuario supervisando cuáles de los siguientes flujos de datos están activos:
- Flujos de salida de audio: Lecturas de voz, indicaciones de audio o reproducción de contenido multimedia
- Transmisiones de grabación de micrófono: Comandos por voz o captura de audio continuos del entorno de un usuario
- Transmisiones de captura de la cámara: Transmisiones de video o fotos
Algunas transmisiones de datos son transitorias y solo mantienen la atención del usuario durante un período breve. Por ejemplo, una lectura de audio del próximo giro que debe realizar un usuario mientras navega por una ruta. Otros flujos de datos son indefinidos y mantienen el conocimiento del usuario mientras continúan. Por ejemplo, la reproducción de contenido multimedia con una playlist aleatoria infinita. Cuando un flujo de datos transitorio interrumpe un flujo de datos indefinido, gana temporalmente la atención del usuario.
Simultaneidad y enfoque de entrada
Los usuarios suelen ejecutar varias experiencias en la app de forma simultánea en los lentes con audio. Por ejemplo, un usuario puede escuchar música mientras sigue la navegación paso a paso. En estos casos, el sistema asigna un estado de simultaneidad y cambia el foco de entrada para que coincida con el foco de audio de la siguiente manera:
- Reanudar o detener la actividad proyectada de tu app
- Enrutar la entrada física a la actividad proyectada en primer plano
Este enfoque ayuda a mantener una experiencia del usuario coherente.
Permite que el sistema vuelva a iniciar la actividad proyectada
Cuando tu app gana reconocimiento del usuario, en especial si su actividad proyectada estaba en segundo plano, el sistema debe poder reanudar la actividad y enrutar la entrada física hacia ella.
Para asegurarte de que el sistema pueda volver a iniciar tu actividad, haz lo siguiente:
Crea un intent pendiente: Crea un
Intentexplícito que apunte a tu actividad proyectada de destino. Une el intent en unPendingIntenty estableceFLAG_UPDATE_CURRENToFLAG_IMMUTABLEpara mantener un comportamiento de inicio seguro y predecible:// Build an explicit Intent pointing to this projected activity and wrap it in a // PendingIntent so the system can relaunch it and route physical input to it. private val pendingIntent: PendingIntent by lazy { val intent = Intent(this, ProjectedInputFocusActivity::class.java) PendingIntent.getActivity( this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE ) }
Registra el receptor de entrada: Obtén una instancia de
ProjectedActivityCompaty registra tuPendingIntentcomo el receptor de entrada designado pasándolo asetActivityAsInputReceiver.override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) lifecycleScope.launch { // Create or obtain the ProjectedActivityCompat instance val projectedActivity = ProjectedActivityCompat.create(this@ProjectedInputFocusActivity) // Register the PendingIntent as the designated input receiver projectedActivity.setActivityAsInputReceiver(pendingIntent) }
Borra el receptor de entrada durante la limpieza: Cuando se destruya tu actividad o ya no necesite recibir entradas físicas, borra el receptor de entrada para evitar envíos de
PendingIntentobsoletos y fugas de memoria.override fun onDestroy() { super.onDestroy() lifecycleScope.launch { val projectedActivity = ProjectedActivityCompat.create(this@ProjectedInputFocusActivity) projectedActivity.clearActivityAsInputReceiver() } }
Comprende cómo cambia el foco de entrada en los estados de simultaneidad
Para determinar qué app recibe el foco de entrada, el sistema evalúa los flujos de datos activos y enruta la entrada según estos estados de simultaneidad:
| Estado de simultaneidad | Contexto ambiental | Comportamiento del sistema y enfoque de entrada | Ejemplo |
|---|---|---|---|
No simultáneas |
Hay una actividad proyectada independiente activa; no se está ejecutando ninguna sesión de contenido multimedia en segundo plano. |
El enfoque de entrada se dirige por completo a tu actividad proyectada, incluso durante los períodos de silencio entre las lecturas. |
Un usuario ejecuta una app de seguimiento de entrenamiento. Incluso durante los momentos de silencio, las entradas del panel táctil se dirigen directamente a la app de fitness. |
Semicorriente |
Una actividad proyectada está activa, pero existe una sesión multimedia en segundo plano en estado de pausa. |
El enfoque de entrada se establece de forma predeterminada en los controles multimedia pausados durante los períodos de silencio entre las lecturas activas de la app. |
Un usuario ejecuta una app de seguimiento de entrenamiento mientras la música está pausada. Entre las actualizaciones del entrenador de fitness, si presionas el panel táctil, se reanudará la música en lugar de activar una función de entrenamiento. |
Simultáneo |
La reproducción dual está activa (por ejemplo, el anuncio de audio de tu app interrumpe o atenúa la música de fondo). |
El foco de audio es igual al foco de entrada. El foco de entrada se dirige a tu actividad proyectada durante las lecturas activas y vuelve a los controles multimedia cuando finaliza la transmisión de audio. |
Un usuario escucha música cuando una app de navegación activa una lectura de instrucciones. Durante la lectura, la app de navegación recibe el foco de entrada. Cuando finaliza la lectura, el foco de entrada vuelve a los controles multimedia. |
Medidas de seguridad de sincronización del sistema
El sistema proporciona las siguientes protecciones para ayudar a evitar entradas accidentales o comportamientos inesperados de los usuarios:
- Períodos de gracia para las actividades proyectadas recién iniciadas: Para adaptarse a la carga de recursos de inicio en frío o a los retrasos de la red, las actividades proyectadas recién iniciadas reciben un breve período de gracia para establecer un flujo de datos y obtener el conocimiento del usuario antes de que el sistema detenga la actividad proyectada y la mueva al segundo plano.
- El enfoque se enruta según el conocimiento del usuario: Si el conocimiento del usuario cambia de un flujo de datos nuevo y activo, como una lectura de audio, el sistema reanuda de inmediato la actividad proyectada y enruta el enfoque de entrada a ella.
- Búferes de transición durante la reproducción de contenido multimedia: Cuando se completa una lectura transitoria durante la reproducción de contenido multimedia en segundo plano, el foco de entrada permanece momentáneamente en la actividad proyectada. El período de búfer ayuda a evitar entradas accidentales, como cuando un usuario intenta silenciar la lectura, pero, en su lugar, omite una pista de música. Después del búfer de transición, el sistema detiene la actividad proyectada de la app y enruta el foco de entrada a los controles multimedia.
- Las actividades proyectadas inactivas se detienen o se pausan: El sistema detiene cualquier actividad proyectada inactiva sin transmisiones de datos activas después de un par de minutos (o momentáneamente para la salida de contenido multimedia en curso cuando se pausa).
Transiciones de enfoque de entrada en la práctica
Para comprender cómo se transfiere el enfoque de entrada entre los estados de simultaneidad, considera las siguientes situaciones de ejemplo para una app de navegación que proporciona instrucciones paso a paso:
Situación A: No simultánea (contenido multimedia inactivo)
En este caso, el sistema enruta la entrada a la app de navegación, que tiene conocimiento del usuario durante todo el viaje.
- El usuario inicia la navegación sin que se reproduzca música de fondo.
- La app de navegación inicia su actividad proyectada en los lentes con audio.
- Como no hay ninguna sesión multimedia activa, la app de navegación mantiene el foco de entrada del panel táctil durante todo el viaje.
- Acciones del usuario: Presionar la pantalla durante una lectura activa podría silenciar las instrucciones. Si presionas la pantalla durante un silencio, es posible que se repita la última instrucción.
Situación B: Semisimultánea (contenido multimedia pausado)
En este caso, el sistema enruta la entrada a los controles multimedia del sistema cada vez que la app de navegación no tiene conocimiento del usuario.
- El usuario inicia la navegación mientras la música de fondo está pausada.
- Durante los períodos de silencio entre las lecturas, el enfoque de entrada se establece de forma predeterminada en los controles multimedia.
- Cuando la app de navegación dice "En 150 metros, gira a la izquierda", obtiene el foco de entrada.
- Acciones del usuario: Presionar la pantalla durante la lectura podría silenciar las instrucciones. Si presionas el botón durante el silencio, se reanudará la reproducción de música.
Situación C: Simultáneo (contenido multimedia activo)
En este caso, el sistema enruta la entrada a los controles multimedia del sistema cada vez que la app de navegación no tiene conocimiento del usuario, y el audio de la reproducción multimedia activa se atenúa durante cada lectura de la app de navegación.
- El usuario inicia la navegación mientras se reproduce música de forma activa.
- Durante la lectura de una instrucción, el sistema atenúa el audio de fondo y cambia el foco de entrada a la app de navegación.
- Acciones del usuario: Presionar la pantalla durante la lectura podría silenciar las instrucciones. Si presionas durante los períodos de silencio, se controla la reproducción de contenido multimedia (para pausar o reanudar).