No Android 13, o recurso de streaming de aplicativos permite que os telefones transmitam seus aplicativos para dispositivos conectados e permite que esses dispositivos interajam com os aplicativos. Uma nova função COMPANION_DEVICE_APP_STREAMING
permite que um aplicativo crie e gerencie proxies para dispositivos remotos conectados para transmitir aplicativos do dispositivo local para o dispositivo remoto. O aplicativo que detém a função COMPANION_DEVICE_APP_STREAMING
pode obter permissões para criar uma exibição virtual, iniciar um aplicativo nele e, em seguida, transmitir um vídeo do aplicativo iniciado para outro dispositivo. O aplicativo 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 esse dispositivo 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 aplicativos e à interação com dispositivos remotos conectados.
Gerenciador de dispositivos virtuais
O streaming de aplicativos funciona aproveitando as vantagens dos displays virtuais . O Virtual Device Manager cria uma tela virtual separada da tela primária visível. Quando o usuário consente em iniciar o streaming de um aplicativo, o aplicativo é iniciado ou transferido para o display virtual. O conteúdo do display virtual é transferido em um fluxo de vídeo para o dispositivo conectado a ser exibido.
O Virtual Device Manager inclui APIs que permitem a criação, registro e gerenciamento de instâncias VirtualDevice
.
Uma instância VirtualDevice
é um proxy para o dispositivo conectado e seus recursos. Uma instância VirtualDevice
permite que um dispositivo conectado receba, exiba e interaja com um fluxo de aplicativo de entrada, fazendo o seguinte:
- Criação de uma instância
VirtualDisplay
destinada a ser exibida na tela de um dispositivo conectado. - Injetar um fluxo de áudio remoto, como do 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 devem ser atendidos para permitir o streaming de aplicativos.
A figura a seguir ilustra as interações entre o dispositivo local e remoto durante o streaming do aplicativo:
Figura 1. Interações entre dispositivos locais e remotos durante streaming de aplicativos
Implementação da função de streaming do aplicativo complementar
Os OEMs podem implementar um aplicativo com a função COMPANION_DEVICE_APP_STREAMING
para permitir uma experiência avançada e segura entre dispositivos em seus dispositivos.
Para criar um dispositivo virtual para ativar o streaming de aplicativos, um aplicativo deve ser detentor da função COMPANION_DEVICE_APP_STREAMING
. Quando a função é concedida, o aplicativo recebe a permissão CREATE_VIRTUAL_DEVICE
, que permite ao aplicativo criar um dispositivo virtual. Espera-se que os detentores de funções implementem o streaming de aplicativos criando uma instância VirtualDevice
que atue como proxy para um dispositivo conectado. A classe VirtualDevice
fornece métodos que permitem a extração de uma superfície composta de um display virtual, adequada para streaming 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 aplicativo em execução em um dispositivo local pareça estar sendo executado nativamente em um dispositivo remoto.
Siga estas etapas para implementar a função de streaming do aplicativo complementar:
Crie um aplicativo que solicite a permissão
REQUEST_COMPANION_PROFILE_APP_STREAMING
no manifesto.Solicite ao usuário que conceda permissão ao aplicativo para realizar streaming de aplicativos.
Crie uma instância CDM
AssociationRequest
para solicitar uma funçãoCOMPANION_DEVICE_APP_STREAMING
. O aplicativo recebe a permissãoCREATE_VIRTUAL_DEVICE
quando a função é concedida.Chame
VirtualDeviceManager#create()
para criar uma instânciaVirtualDevice
. Com uma instânciaVirtualDevice
, o aplicativo pode criar e gerenciar exibições e entradas virtuais.Inicie a intenção pendente da notificação no display virtual e crie uma captura de vídeo desse display.
Crie uma conexão com o dispositivo conectado e transmita a exibição virtual para o dispositivo conectado.
Injete eventos de entrada de volta do dispositivo conectado no dispositivo local por meio das APIs
VirtualDevice
.Quando o usuário fechar o aplicativo de streaming no dispositivo remoto, encerre o stream e desative a instância do
VirtualDevice
. Neste ponto, o aplicativo de streaming anterior é executado em segundo plano no dispositivo local e a conexão é encerrada.Se necessário, aguarde mais sinais do dispositivo conectado para reiniciar o streaming do aplicativo.
O aplicativo é responsável por conectar-se ao dispositivo remoto, relatar o estado de conectividade ao CDM e aplicar os requisitos de segurança descritos no CDD .
Requisitos do titular da função COMPANION_DEVICE_APP_STREAMING
O CDM concede a função COMPANION_DEVICE_APP_STREAMING
quando o usuário associa um aplicativo de streaming de aplicativo a um dispositivo. Essa função está associada a um perfil de dispositivo, portanto, há algum controle sobre quais aplicativos podem ser adicionados à Play Store que correspondem a esse perfil. Consulte Funções do Android para obter uma lista dos requisitos da função COMPANION_DEVICE_APP_STREAMING
. Entre em contato com seu ponto de contato do Google para obter mais informações.
Capacidades do titular da função COMPANION_DEVICE_APP_STREAMING
Para executar o streaming de aplicativos, a função COMPANION_DEVICE_APP_STREAMING
pressupõe que o aplicativo detentor da função tenha os seguintes recursos e comportamentos:
- Crie e gerencie conexões com outros dispositivos.
- Crie e gerencie monitores virtuais confiáveis, incluindo monitores desbloqueados, da seguinte forma:
- Inicie atividades no display virtual.
- Injete eventos que acontecem em um aplicativo transmitido em um dispositivo conectado de volta ao dispositivo local, como reproduzir um evento de toque no tablet nas mesmas coordenadas do telefone.
- Capture dados de áudio do aplicativo transmitido.
- Substitua o fluxo do microfone do dispositivo local pelo fluxo do microfone de um dispositivo conectado enquanto um aplicativo transmitido estiver usando o microfone.
- Substitua o stream da câmera do dispositivo local pelo stream da câmera de um dispositivo conectado enquanto um aplicativo transmitido estiver usando a câmera.
- Gerencie e transmita notificações do dispositivo local para o dispositivo conectado e execute ações nas notificações.
- Transmita metadados do dispositivo local, como a lista de aplicativos disponíveis no dispositivo local, para o dispositivo conectado.
- Solicite a verificação do dispositivo.