Streaming de app complementar

No Android 13, o recurso de streaming de apps permite que smartphones façam streaming de apps para dispositivos conectados e que esses dispositivos interajam com os apps. Uma nova função COMPANION_DEVICE_APP_STREAMING permite que um app crie e gerencie proxies para dispositivos remotos conectados para transmitir apps do dispositivo local para o remoto. O app que tem o papel COMPANION_DEVICE_APP_STREAMING pode receber permissões para criar uma tela virtual, iniciar um app nela e transmitir um vídeo do app iniciado para outro dispositivo. O app detentor de função também pode injetar eventos de entrada e microfone recebidos de um dispositivo remoto de volta no dispositivo local, como se ele estivesse conectado como um periférico.

Arquitetura

No Android 13 e versões mais recentes, o novo Gerenciador de dispositivos virtuais e o Gerenciador de dispositivos complementar (CDM, na sigla em inglês) formam os principais blocos de construção para oferecer suporte ao streaming de apps e à interação com dispositivos remotos conectados.

Gerenciador de dispositivos virtuais

O espelhamento de app funciona usando telas virtuais. O Gerenciador de dispositivos virtuais cria uma tela virtual separada da tela principal visível. Quando o usuário consente em iniciar o streaming de um app, ele é iniciado ou transferido para a tela virtual. O conteúdo da tela virtual é transferido em um stream de vídeo para o dispositivo conectado a ser exibido.

O Gerenciador de dispositivos virtuais inclui APIs que permitem a criação, o registro e o gerenciamento de instâncias de VirtualDevice.

Uma instância VirtualDevice é um proxy para o dispositivo conectado e os recursos dele. Uma instância VirtualDevice permite que um dispositivo conectado receba, exiba e interaja com um stream de app de entrada da seguinte maneira:

  • Criar uma instância de VirtualDisplay que será exibida na tela de um dispositivo conectado.
  • Injete um stream de áudio remoto, como do microfone do dispositivo conectado, no dispositivo local para reprodução.
  • Injete eventos de entrada remotos, como o do teclado do dispositivo conectado, no dispositivo local para reprodução.

Gerenciador de dispositivos complementar

O CDM gerencia o estado de conectividade e impõe os requisitos de função que precisam ser atendidos para ativar o streaming de apps.

A figura a seguir ilustra as interações entre o dispositivo local e o remoto durante o streaming de apps:

app-streaming-interaction

Figura 1. Interações entre os dispositivos local e remoto durante o streaming de apps

Implementação do papel de streaming do app complementar

Os OEMs podem implementar um app com o papel COMPANION_DEVICE_APP_STREAMING para permitir uma experiência entre dispositivos rica e segura nos dispositivos.

Para criar um dispositivo virtual e ativar o streaming de apps, um app precisa ser titular de função da função COMPANION_DEVICE_APP_STREAMING. Quando o papel é concedido, o app recebe a permissão CREATE_VIRTUAL_DEVICE, que permite criar um dispositivo virtual. Os detentores de função precisam implementar o streaming de apps criando uma instância de VirtualDevice que atua como um proxy para um dispositivo conectado. A classe VirtualDevice oferece métodos que permitem a extração de uma superfície composta de uma tela virtual, adequada para streaming em outro dispositivo. A classe VirtualDevice também oferece APIs para injetar eventos de entrada que ocorrem em um dispositivo remoto no dispositivo local, permitindo que um app em execução em um dispositivo local apareça como se estivesse sendo executado de forma nativa em um dispositivo remoto.

Siga estas etapas para implementar o papel de streaming do app complementar:

  1. Crie um app que solicite a permissão REQUEST_COMPANION_PROFILE_APP_STREAMING no manifesto.

  2. Peça ao usuário para conceder a permissão de streaming de apps.

  3. Crie uma instância AssociationRequest do CDM para solicitar um papel COMPANION_DEVICE_APP_STREAMING. O app recebe a permissão CREATE_VIRTUAL_DEVICE quando o papel é concedido.

  4. Chame VirtualDeviceManager#create() para criar uma instância de VirtualDevice. Com uma instância VirtualDevice, o app pode criar e gerenciar telas e entradas virtuais.

  5. Inicie a intent pendente da notificação na tela virtual e crie uma captura de vídeo dela.

  6. Crie uma conexão com o dispositivo conectado e transmita a tela virtual para ele.

  7. Injete eventos de entrada do dispositivo conectado no dispositivo local usando as APIs VirtualDevice.

  8. Quando o usuário fechar o app de streaming no dispositivo remoto, encerre a transmissão e remova a instância VirtualDevice. Nesse ponto, o app de streaming anteriormente executado em segundo plano no dispositivo local e a conexão são fechadas.

  9. Se necessário, aguarde mais sinais do dispositivo conectado para reiniciar o streaming do app.

O app é responsável por se conectar ao dispositivo remoto, informar o estado de conectividade ao CDM e aplicar os requisitos de segurança, conforme descrito no CDD.

Requisitos do detentor de função COMPANION_DEVICE_APP_STREAMING

O CDM concede o papel COMPANION_DEVICE_APP_STREAMING quando o usuário associa um app de streaming a um dispositivo. Essa função é associada a um perfil de dispositivo, para que haja algum controle sobre quais apps podem ser adicionados à Play Store que correspondem a esse perfil. Consulte Funções do Android para conferir uma lista dos requisitos de função COMPANION_DEVICE_APP_STREAMING. Entre em contato com seu ponto de contato do Google para mais informações.

Recursos do detentor de função COMPANION_DEVICE_APP_STREAMING

Para realizar o streaming de apps, o papel COMPANION_DEVICE_APP_STREAMING assume que o app do detentor de papel tem os seguintes recursos e comportamentos:

  • Criar e gerenciar conexões com outros dispositivos.
  • Crie e gerencie telas virtuais confiáveis, incluindo telas desbloqueadas, da seguinte maneira:
    • Iniciar atividades na tela virtual.
    • Injete eventos que acontecem em um app transmitido em um dispositivo conectado de volta no dispositivo local, como a reprodução de um evento de toque no tablet nas mesmas coordenadas do smartphone.
    • Capture dados de áudio do app transmitido.
    • Substitua o fluxo de microfone do dispositivo local pelo fluxo de microfone de um dispositivo conectado enquanto um app de streaming estiver usando o microfone.
    • Substitua o fluxo de câmera do dispositivo local pelo fluxo de câmera de um dispositivo conectado enquanto um app transmitido estiver usando a câmera.
  • Gerenciar e transmitir notificações do dispositivo local para o dispositivo conectado e realizar ações em notificações.
  • Transmita metadados do dispositivo local, como a lista de apps disponíveis no dispositivo local, para o dispositivo conectado.
  • Solicitar a verificação do dispositivo.