No Android 13, o recurso de streaming de apps permite que os smartphones
transmitam 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 e
transmita apps 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 titular da função também pode injetar eventos de entrada e microfone
recebidos de um dispositivo remoto no dispositivo local, como se ele estivesse
conectado como um periférico.
Arquitetura
A partir do Android 13, o novo Virtual Device Manager e o Companion Device Manager (CDM) formam os principais blocos de construção para oferecer suporte ao streaming de apps e à interação com dispositivos remotos e conectados.
Gerenciador de dispositivos virtuais
O espelhamento de app funciona aproveitando as exibições virtuais. O Virtual Device Manager cria uma tela virtual separada da tela principal visível. Quando o usuário concorda 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 Virtual Device Manager inclui APIs que permitem a criação, o registro e o gerenciamento de instâncias 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 fluxo de app recebido, fazendo o seguinte:
- Criar uma instância de
VirtualDisplay
para ser exibida na tela de um dispositivo conectado. - Injetar um fluxo de áudio remoto, como o microfone do dispositivo conectado, no dispositivo local para reprodução.
- Injetar eventos de entrada remota, como os do teclado do dispositivo conectado, no dispositivo local para reprodução.
Gerenciador de dispositivos complementar
O CDM gerencia o estado da 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 os dispositivos local e remoto durante o streaming de apps:
Figura 1. Interações entre os dispositivos local e remoto durante o streaming de apps
Implementação da função de streaming do app complementar
Os OEMs podem implementar um app com a função COMPANION_DEVICE_APP_STREAMING
para
permitir uma experiência avançada e segura entre dispositivos.
Para criar um dispositivo virtual e ativar o streaming de apps, um app precisa ser titular 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 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 combinada 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 nativamente em um dispositivo remoto.
Siga estas etapas para implementar a função de streaming do app complementar:
Crie um app que solicite a permissão
REQUEST_COMPANION_PROFILE_APP_STREAMING
no manifesto.Solicite que o usuário conceda ao app permissão para fazer streaming.
Crie uma instância do CDM
AssociationRequest
para solicitar uma funçãoCOMPANION_DEVICE_APP_STREAMING
. O app recebe a permissãoCREATE_VIRTUAL_DEVICE
quando o papel é concedido.Chame
VirtualDeviceManager#create()
para criar uma instânciaVirtualDevice
. Com uma instânciaVirtualDevice
, o app pode criar e gerenciar telas e entradas virtuais.Inicie a intent pendente da notificação na tela virtual e crie uma captura de vídeo dessa tela.
Crie uma conexão com o dispositivo conectado e transmita a tela virtual para ele.
Injete eventos de entrada do dispositivo conectado no dispositivo local usando as APIs
VirtualDevice
.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 anterior é executado em segundo plano no dispositivo local, e a conexão é fechada.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. Assim, há algum controle sobre quais apps podem ser adicionados à Play
Store que correspondem a esse perfil. Consulte Funções do Android para ver uma lista dos requisitos de função do COMPANION_DEVICE_APP_STREAMING
. Para mais informações, entre em contato com seu ponto de contato do Google.
Recursos do titular da função COMPANION_DEVICE_APP_STREAMING
Para realizar o streaming 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 forma:
- Inicie atividades na tela virtual.
- Injete eventos que acontecem em um app transmitido em um dispositivo conectado de volta no dispositivo local, como reproduzir um evento de toque no tablet nas mesmas coordenadas do smartphone.
- Capturar 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 transmitido estiver usando o microfone.
- Substituir 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.