Transmisión de apps complementarias

En Android 13, la función de transmisión de apps permite que los teléfonos transmitan sus apps a dispositivos conectados y que estos interactúen con las apps. Un nuevo rol de COMPANION_DEVICE_APP_STREAMING permite que una app cree y administre proxies para dispositivos remotos conectados para transmitir apps desde el dispositivo local al dispositivo remoto. La app que tiene el rol de COMPANION_DEVICE_APP_STREAMING puede obtener permisos para crear una pantalla virtual, iniciar una app en ella y, luego, transmitir un video de la app iniciada a otro dispositivo. La app del titular del rol también puede insertar eventos de entrada y micrófono recibidos de un dispositivo remoto en el dispositivo local, como si ese dispositivo estuviera conectado como periférico.

Arquitectura

A partir de Android 13, el nuevo Administrador de dispositivos virtuales y el Administrador de dispositivos complementarios (CDM) forman los componentes básicos clave para admitir la transmisión de apps y la interacción con dispositivos remotos conectados.

Administrador de dispositivos virtuales

La transmisión de apps funciona aprovechando las pantallas virtuales. El Virtual Device Manager crea una pantalla virtual separada de la pantalla principal visible. Cuando el usuario da su consentimiento para comenzar a transmitir una app, esta se inicia o se transfiere a la pantalla virtual. El contenido de la pantalla virtual se transfiere en una transmisión de video al dispositivo conectado para que se muestre.

Virtual Device Manager incluye APIs que permiten la creación, el registro y la administración de instancias de VirtualDevice.

Una instancia de VirtualDevice es un proxy para el dispositivo conectado y sus capacidades. Una instancia de VirtualDevice permite que un dispositivo conectado reciba, muestre y permita interactuar con una transmisión de app entrante de la siguiente manera:

  • Crea una instancia de VirtualDisplay que se mostrará en la pantalla de un dispositivo conectado.
  • Se inserta un flujo de audio remoto, como el del micrófono del dispositivo conectado, en el dispositivo local para su reproducción.
  • Inyectar eventos de entrada remotos, como los del teclado del dispositivo conectado, en el dispositivo local para la reproducción

Administrador de dispositivo complementario

El CDM administra el estado de conectividad y aplica los requisitos de rol que se deben cumplir para habilitar la transmisión de apps.

En la siguiente figura, se ilustran las interacciones entre el dispositivo local y el remoto durante la transmisión de la app:

app-streaming-interaction

Figura 1: Interacciones entre los dispositivos locales y remotos durante la transmisión de apps

Implementación del rol de transmisión de la app complementaria

Los OEM pueden implementar una app con el rol COMPANION_DEVICE_APP_STREAMING para habilitar una experiencia multidispositivo enriquecida y segura en sus dispositivos.

Para crear un dispositivo virtual que habilite la transmisión de apps, una app debe desempeñar el rol de COMPANION_DEVICE_APP_STREAMING. Cuando se otorga el rol, la app recibe el permiso CREATE_VIRTUAL_DEVICE, que le permite crear un dispositivo virtual. Se espera que los titulares de roles implementen la transmisión de apps creando una instancia de VirtualDevice que actúe como proxy para un dispositivo conectado. La clase VirtualDevice proporciona métodos que permiten extraer una superficie compuesta de una pantalla virtual, apta para la transmisión a otro dispositivo. La clase VirtualDevice también proporciona APIs para insertar eventos de entrada que ocurren en un dispositivo remoto en el dispositivo local, lo que permite que una app que se ejecuta en un dispositivo local aparezca como si se ejecutara de forma nativa en un dispositivo remoto.

Sigue estos pasos para implementar el rol de transmisión de la app complementaria:

  1. Crea una app que solicite el permiso REQUEST_COMPANION_PROFILE_APP_STREAMING en el manifiesto.

  2. Solicitarle al usuario que otorgue permiso a la app para realizar la transmisión de apps

  3. Crea una instancia de CDM AssociationRequest para solicitar un rol de COMPANION_DEVICE_APP_STREAMING. La app recibe el permiso CREATE_VIRTUAL_DEVICE cuando se otorga el rol.

  4. Llama a VirtualDeviceManager#create() para crear una instancia de VirtualDevice. Con una instancia de VirtualDevice, la app puede crear y administrar pantallas virtuales y entradas virtuales.

  5. Inicia el intent pendiente de la notificación en la pantalla virtual y crea una captura de video de esa pantalla.

  6. Crea una conexión al dispositivo conectado y transmite la pantalla virtual al dispositivo conectado.

  7. Inserta eventos de entrada del dispositivo conectado en el dispositivo local a través de las APIs de VirtualDevice.

  8. Cuando el usuario cierre la app de transmisión en el dispositivo remoto, finaliza la transmisión y cierra la instancia de VirtualDevice. En este punto, la app que se transmitía anteriormente se ejecuta en segundo plano en el dispositivo local y se cierra la conexión.

  9. Si es necesario, espera más señales del dispositivo conectado para reiniciar la transmisión de la app.

La app es responsable de conectarse al dispositivo remoto, informar el estado de conectividad al CDM y aplicar los requisitos de seguridad como se describe en el CDD.

Requisitos para el titular del rol de COMPANION_DEVICE_APP_STREAMING

El CDM otorga el rol COMPANION_DEVICE_APP_STREAMING cuando el usuario asocia una app de transmisión de apps con un dispositivo. Este rol está asociado a un perfil de dispositivo, por lo que hay cierto control sobre qué apps se pueden agregar a Play Store que coincidan con este perfil. Consulta Roles de Android para obtener una lista de los requisitos del rol de COMPANION_DEVICE_APP_STREAMING. Comunícate con tu punto de contacto de Google para obtener más información.

Capacidades del titular del rol de COMPANION_DEVICE_APP_STREAMING

Para realizar la transmisión de apps, el rol COMPANION_DEVICE_APP_STREAMING supone que la app del titular del rol tiene las siguientes capacidades y comportamientos:

  • Crear y administrar conexiones a otros dispositivos
  • Crea y administra pantallas virtuales de confianza, incluidas las pantallas desbloqueadas, de la siguiente manera:
    • Inicia actividades en la pantalla virtual.
    • Inserta eventos que ocurren en una app transmitida en un dispositivo conectado de vuelta en el dispositivo local, como reproducir un evento táctil en la tablet en las mismas coordenadas del teléfono.
    • Captura datos de audio de la app transmitida.
    • Reemplaza el flujo del micrófono del dispositivo local por el flujo del micrófono de un dispositivo conectado mientras una app transmitida usa el micrófono.
    • Reemplazar la transmisión de la cámara del dispositivo local por la transmisión de la cámara de un dispositivo conectado mientras una app transmitida usa la cámara
  • Administrar y transmitir notificaciones desde el dispositivo local al dispositivo conectado, y realizar acciones en las notificaciones
  • Transmitir metadatos desde el dispositivo local, como la lista de apps disponibles en el dispositivo local, al dispositivo conectado
  • Solicita la verificación del dispositivo.