Espelhamento do app complementar

No Android 13, o recurso de espelhamento de app permite que os smartphones transmitam os 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 de streaming do dispositivo local para o remoto. O app que tem a função 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 do detentor da 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

A partir do Android 13, o novo Gerenciador de dispositivos virtuais e o Gerenciador de dispositivos complementares (CDM, na sigla em inglês) formam os principais elementos para oferecer suporte ao espelhamento de apps e à interação com dispositivos remotos conectados.

Gerenciador de dispositivos virtuais

O espelhamento de app funciona aproveitando as telas virtuais. O Gerenciador de dispositivos virtual 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 e 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 suas capacidades. Uma instância VirtualDevice permite que um dispositivo conectado receba, mostre e interaja com um espelhamento de app recebido, fazendo o seguinte:

  • Criar uma instância de VirtualDisplay para ser exibida na tela de um dispositivo conectado.
  • Injetar um stream de áudio remoto, como o microfone do dispositivo conectado, no dispositivo local para reprodução.
  • Injetar eventos de entrada remota, como 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 espelhamento de app.

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

app-streaming-interaction

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

Implementação da função de espelhamento de app do app complementar

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

Para criar um dispositivo virtual e ativar o espelhamento de apps, um app precisa ser um detentor 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 espelhamento de apps criando uma instância VirtualDevice que atua como um proxy para um dispositivo conectado. A classe VirtualDevice fornece métodos que permitem a extração de uma superfície composta de uma tela virtual, adequada para transmissão para outro dispositivo. A classe VirtualDevice também fornece 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 nativamente em um dispositivo remoto.

Siga estas etapas para implementar a função de espelhamento de app 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 ao app permissão para fazer o espelhamento.

  3. Crie uma instância do CDM AssociationRequest para solicitar uma função 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 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 dessa tela.

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

  7. Injetar eventos de entrada do dispositivo conectado de volta 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 desfaça a instância VirtualDevice. Nesse momento, o app de streaming anteriormente aberto é executado em segundo plano no dispositivo local, e a conexão é fechada.

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

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 para o titular da função COMPANION_DEVICE_APP_STREAMING

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

Recursos do detentor da função COMPANION_DEVICE_APP_STREAMING

Para realizar o espelhamento de apps, a função COMPANION_DEVICE_APP_STREAMING pressupõe que o app do titular da função tenha 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:
    • Inicie atividades na tela virtual.
    • Injetar eventos que acontecem em um app de streaming em um dispositivo conectado de volta no dispositivo local, como reproduzir um evento de toque no tablet nas mesmas coordenadas no smartphone.
    • Capturar dados de áudio do app de streaming.
    • Substitua o stream do microfone do dispositivo local pelo stream do microfone de um dispositivo conectado enquanto um app de streaming estiver usando o microfone.
    • Substitua o stream da câmera do dispositivo local pelo stream da 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 nelas.
  • Transmitir metadados do dispositivo local, como a lista de apps disponíveis nele, para o dispositivo conectado.
  • Solicitar a verificação do dispositivo.