Transmisión de aplicaciones 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 esos dispositivos interactúen con las apps. Un nuevo rol COMPANION_DEVICE_APP_STREAMING permite que una app cree y administre proxies para dispositivos remotos conectados para transmitir apps del dispositivo local al dispositivo remoto. La app que tiene el rol 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 titular de la función 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 y conectados.

Administrador de dispositivos virtuales

La transmisión de apps funciona aprovechando las pantallas virtuales. El Administrador de dispositivos virtuales crea una pantalla virtual que está 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.

El Administrador de dispositivos virtuales 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 e interactúe con una transmisión de apps entrante haciendo lo siguiente:

  • Crear una instancia de VirtualDisplay para que se muestre en la pantalla de un dispositivo conectado
  • Inyectar una transmisión de audio remota, como la del micrófono del dispositivo conectado, en el dispositivo local para la reproducción
  • Incorporar eventos de entrada remota, como el 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 la función que deben cumplirse 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 apps:

app-streaming-interaction

Figura 1: Interacciones entre los dispositivos local y remoto durante la transmisión de apps

Implementación de la función de transmisión de aplicaciones complementarias

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

Para crear un dispositivo virtual que habilite la transmisión de apps, una app debe ser titular del rol 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 la extracción de una superficie compuesta de una pantalla virtual, adecuada para transmitir 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. Pídele 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 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 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 con el dispositivo conectado y transmite la pantalla virtual al dispositivo conectado.

  7. Inyecta eventos de entrada de atrás 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 borra la instancia de VirtualDevice. En este punto, la app que se estaba transmitiendo antes se ejecuta en segundo plano en el dispositivo local y se cierra la conexión.

  9. Si es necesario, espera a recibir 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 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 con un perfil de dispositivo para que haya cierto control sobre las apps que se pueden agregar a Play Store que coincidan con este perfil. Consulta la sección Roles de Android para obtener una lista de los requisitos de la función COMPANION_DEVICE_APP_STREAMING. Comunícate con tu punto de contacto de Google para obtener más información.

Funciones del titular del rol 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 con otros dispositivos
  • Crea y administra pantallas virtuales de confianza, incluidas las desbloqueadas, de la siguiente manera:
    • Inicia actividades en la pantalla virtual.
    • Incorpora en el dispositivo local eventos que ocurran en una app que se transmite en un dispositivo conectado, como la reproducción de un evento táctil en la tablet en las mismas coordenadas del teléfono.
    • Captura datos de audio de la app transmitida.
    • Reemplaza la transmisión del micrófono del dispositivo local por la transmisión del micrófono de un dispositivo conectado mientras una app transmitida usa el micrófono.
    • Reemplaza 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.
  • Administra y transmite notificaciones del dispositivo local al dispositivo conectado, y realiza acciones en ellas.
  • Transmite metadatos desde el dispositivo local, como la lista de apps disponibles en el dispositivo local, al dispositivo conectado.
  • Solicita la verificación del dispositivo.