Android 13应用串流功能详解:架构、实现与权限管理
Android 13应用串流功能详解:架构、实现与权限管理
在Android 13中,Google引入了应用串流功能,允许手机将其应用流式传输到已连接的设备,并让这些设备与相应应用进行交互。这一功能的实现依赖于新的COMPANION_DEVICE_APP_STREAMING角色,使得应用能够为已连接的远程设备创建和管理代理,从而实现应用从本地设备到远程设备的流式传输。
在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角色。原始设备制造商(OEM)必须确保在设备验证流程中提交应用以供审核。如需了解详情,请与您的Google联系人联系。
如需创建虚拟设备以启用应用串流,应用必须是COMPANION_DEVICE_APP_STREAMING角色的持有者。授予此角色后,应用会获得CREATE_VIRTUAL_DEVICE权限,从而可以创建虚拟设备。角色持有者应通过创建充当已连接设备的代理的VirtualDevice实例来实现应用串流。VirtualDevice类提供的方法可提取虚拟屏幕的合成Surface,适用于流式传输到其他设备。VirtualDevice类还提供了用于将远程设备上发生的输入事件注入本地设备的API,使本地设备上运行的应用就像以原生方式在远程设备上运行一样。
如需实现配套应用串流角色,请按以下步骤操作:
- 创建一个在清单中请求REQUEST_COMPANION_PROFILE_APP_STREAMING权限的应用。
- 提示用户授予应用执行应用串流的权限。
- 创建CDMAssociationRequest实例以请求COMPANION_DEVICE_APP_STREAMING角色。授予此角色后,应用会获得CREATE_VIRTUAL_DEVICE权限。
- 调用VirtualDeviceManager#create()以创建VirtualDevice实例。借助VirtualDevice实例,应用可以创建和管理虚拟屏幕和虚拟输入。
- 在虚拟屏幕上启动通知的待定intent,并创建该屏幕的视频拍摄画面。
- 创建与已连接设备的连接,并将虚拟屏幕流式传输到已连接的设备。
- 通过VirtualDeviceAPI将输入事件从已连接的设备注入回本地设备。
- 当用户关闭远程设备上的流式传输应用时,结束数据流并拆解VirtualDevice实例。此时,之前的流式传输应用在本地设备的后台运行,并且连接已关闭。
- 如有必要,请等待来自已连接设备的更多信号以重启应用串流。
应用负责连接到远程设备,向CDM报告连接状态,以及强制执行安全要求(如CDD中所述)。
注意:Google提供了一种名为“跨设备服务”的闭源实现,支持将应用从任何搭载Android 13或更高版本的Android手机流式传输到Chromebook。OEM可以在特权应用目录下预加载跨设备服务APK。
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。
- 将已连接设备上流式传输后获得的应用中发生的事件注入回本地设备,例如,按手机上的相同坐标在平板电脑上播放触摸事件。
- 从流式传输后获得的应用捕获音频数据。
- 当流式传输后获得的应用使用麦克风时,将本地设备的麦克风输入流替换为已连接设备的麦克风输入流。
- 当流式传输后获得的应用使用相机时,将本地设备的相机数据流替换为已连接设备的相机数据流。
- 管理本地设备上的通知并将其流式传输到已连接的设备,以及对通知执行操作。
- 将本地设备中的元数据(例如本地设备上的可用应用列表)流式传输到已连接的设备。
- 请求验证设备。