在 Android 13 中,应用串流功能允许手机将其应用串流到连接的设备,并允许这些设备与应用进行交互。新的 COMPANION_DEVICE_APP_STREAMING
角色允许应用创建和管理连接的远程设备的代理,以将应用从本地设备串流到远程设备。 拥有 COMPANION_DEVICE_APP_STREAMING
角色的应用可以获得权限以创建虚拟显示屏,在其上启动应用,然后将启动的应用的视频串流到另一台设备。 角色持有者应用还可以将从远程设备接收到的输入和麦克风事件注入回本地设备,就像该设备作为外围设备连接一样。
架构
从 Android 13 开始,新的 Virtual Device Manager 和 Companion Device Manager (CDM) 构成了支持应用串流以及与远程连接设备进行交互的关键构建块。
Virtual Device Manager
应用串流通过利用虚拟显示屏来实现。 Virtual Device Manager 创建一个与可见主显示屏分离的虚拟显示屏。 当用户同意开始串流应用时,应用会在虚拟显示屏上启动或转移到虚拟显示屏。 虚拟显示屏的内容以视频流的形式传输到连接的设备以进行显示。
Virtual Device Manager 包含 API,这些 API 支持创建、注册和管理 VirtualDevice
实例。
VirtualDevice
实例是连接的设备及其功能的代理。 VirtualDevice
实例使连接的设备能够通过执行以下操作来接收、显示和交互传入的应用流
- 创建旨在连接设备的显示屏上显示的
VirtualDisplay
实例。 - 将远程音频流(例如来自连接设备的麦克风的音频流)注入到本地设备以进行播放。
- 将远程输入事件(例如来自连接设备的键盘的输入事件)注入到本地设备以进行播放。
Companion Device Manager
CDM 管理连接状态并强制执行必须满足的角色要求才能启用应用串流。
下图说明了应用串流期间本地设备和远程设备之间的交互
图 1. 应用串流期间本地设备和远程设备之间的交互
伴侣应用串流角色的实现
OEM 可以实现具有 COMPANION_DEVICE_APP_STREAMING
角色的应用,以在其设备上实现丰富且安全的跨设备体验。
要创建虚拟设备以启用应用串流,应用必须是 COMPANION_DEVICE_APP_STREAMING
角色的持有者。 当角色被授予时,应用会收到 CREATE_VIRTUAL_DEVICE
权限,这使应用能够创建虚拟设备。 角色持有者应通过创建充当连接设备代理的 VirtualDevice
实例来实现应用串流。 VirtualDevice
类提供了一些方法,这些方法支持提取虚拟显示屏的合成表面,适用于串流到另一台设备。 VirtualDevice
类还提供 API,用于将远程设备上发生的输入事件注入到本地设备,从而使在本地设备上运行的应用看起来像是在远程设备上本地运行一样。
按照以下步骤实现伴侣应用串流角色
创建一个在清单文件中请求
REQUEST_COMPANION_PROFILE_APP_STREAMING
权限的应用。提示用户授予应用执行应用串流的权限。
创建 CDM
AssociationRequest
实例以请求COMPANION_DEVICE_APP_STREAMING
角色。 当角色被授予时,应用会收到CREATE_VIRTUAL_DEVICE
权限。调用
VirtualDeviceManager#create()
以创建VirtualDevice
实例。 使用VirtualDevice
实例,应用可以创建和管理虚拟显示屏和虚拟输入。在虚拟显示屏上启动通知的待定 intent,并创建该显示屏的视频捕获。
创建与连接设备的连接,并将虚拟显示屏串流到连接的设备。
通过
VirtualDevice
API 将来自连接设备的输入事件注入回本地设备。当用户关闭远程设备上的串流应用时,结束串流并拆除
VirtualDevice
实例。 此时,先前串流的应用在本地设备上后台运行,并且连接已关闭。如果需要,请等待来自连接设备的更多信号以重新启动应用串流。
应用负责连接到远程设备,向 CDM 报告连接状态,并强制执行 CDD 中描述的安全要求。
COMPANION_DEVICE_APP_STREAMING 角色持有者要求
当用户将应用串流应用与设备关联时,CDM 会授予 COMPANION_DEVICE_APP_STREAMING
角色。 此角色与设备配置文件关联,因此可以控制哪些应用可以添加到 Play 商店以匹配此配置文件。 有关 COMPANION_DEVICE_APP_STREAMING
角色要求的列表,请参阅 Android 角色。 请联系您的 Google 联系人以获取更多信息。
COMPANION_DEVICE_APP_STREAMING 角色持有者功能
为了执行应用串流,COMPANION_DEVICE_APP_STREAMING
角色假定角色持有者应用具有以下功能和行为
- 创建和管理与其他设备的连接。
- 创建和管理受信任的虚拟显示屏,包括未锁定的显示屏,如下所示
- 在虚拟显示屏上启动 Activity。
- 将在连接设备上的串流应用上发生的事件注入回本地设备,例如在平板电脑上播放触摸事件,其坐标与手机上的坐标相同。
- 从串流应用捕获音频数据。
- 当串流应用正在使用麦克风时,将本地设备的麦克风流替换为连接设备的麦克风流。
- 当串流应用正在使用相机时,将本地设备的相机流替换为连接设备的相机流。
- 管理和串流来自本地设备到连接设备的通知,并对通知执行操作。
- 将元数据从本地设备(例如本地设备上可用的应用列表)串流到连接的设备。
- 请求设备验证。