在 Android 13 中,应用串流功能允许手机将其应用流式传输到已连接的设备,并让这些设备与相应应用进行交互。借助新的 COMPANION_DEVICE_APP_STREAMING
角色,应用可以为已连接的远程设备创建和管理代理,以便将应用从本地设备流式传输到远程设备。拥有 COMPANION_DEVICE_APP_STREAMING
角色的应用可以获得以下权限:创建虚拟屏幕、在其上启动应用,然后将已启动应用的视频流式传输到其他设备。角色持有者应用也可以将从远程设备收到的输入和麦克风事件注入回本地设备,就像该设备作为外围设备连接一样。
架构
从 Android 13 开始,新的虚拟设备管理器和配套设备管理器 (CDM) 构成了支持应用串流以及与已连接远程设备的交互的主要构建基块。
虚拟设备管理器
应用串流是通过利用虚拟屏幕来实现的。虚拟设备管理器会创建一个与可见主屏幕分开的虚拟屏幕。当用户同意开始流式传输应用时,该应用将在虚拟屏幕上启动或转移到虚拟屏幕。虚拟屏幕的内容会在视频串流中传输给已连接的设备进行显示。
虚拟设备管理器包含可用于创建、注册和管理 VirtualDevice
实例的 API。
VirtualDevice
实例是已连接设备及其功能的代理。借助 VirtualDevice
实例,已连接的设备可以通过执行以下操作来接收、显示传入的应用串流并与之交互:
- 创建要在已连接设备的屏幕上显示的
VirtualDisplay
实例。 - 将远程音频串流(例如从已连接设备的麦克风)注入本地设备进行播放。
- 将远程输入事件(例如从已连接设备的键盘)注入本地设备进行播放。
配套设备管理器
CDM 会管理连接状态,并强制执行启用应用串流所必须满足的角色要求。
下图说明了应用串流期间本地设备和远程设备之间的交互:
图 1. 应用串流期间本地设备和远程设备之间的交互
配套应用串流角色的实现
OEM 可以实现一个具有 COMPANION_DEVICE_APP_STREAMING
角色的应用,以便在其设备上提供丰富且安全的跨设备体验。
如需创建虚拟设备以启用应用串流,应用必须是 COMPANION_DEVICE_APP_STREAMING
角色的持有者。授予此角色后,应用会获得 CREATE_VIRTUAL_DEVICE
权限,从而可以创建虚拟设备。角色持有者应通过创建充当已连接设备的代理的 VirtualDevice
实例来实现应用串流。VirtualDevice
类提供的方法可提取虚拟屏幕的合成 Surface,适用于流式传输到其他设备。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。
- 将已连接设备上流式传输后获得的应用中发生的事件注入回本地设备,例如,按手机上的相同坐标在平板电脑上播放触摸事件。
- 从流式传输后获得的应用捕获音频数据。
- 当流式传输后获得的应用使用麦克风时,将本地设备的麦克风输入流替换为已连接设备的麦克风输入流。
- 当流式传输后获得的应用使用相机时,将本地设备的相机数据流替换为已连接设备的相机数据流。
- 管理本地设备上的通知并将其流式传输到已连接的设备,以及对通知执行操作。
- 将本地设备中的元数据(例如本地设备上的可用应用列表)流式传输到已连接的设备。
- 请求验证设备。