DeviceManager.shared 是单例,管输入设备的枚举与选择。
音频输出路由(扬声器 / 听筒 / 蓝牙)是另一套,见音频路由。
枚举设备
DeviceInfo 的字段:deviceId、name、kind、isDefault。
UI 上做设备下拉框时用
cachedDevices() 更合适 —— 它不会每次渲染都去查系统。
配合下面的热插拔事件刷新缓存即可。切换摄像头
deviceId 可以直接喂回采集参数,这条回路是设备切换能力的地基:
切换麦克风
有两条路:输出设备
setSpeakerOutputPreferred(true/false) 与 AudioRouteSession 的
defaultAudioRoute 管的是同一件事的不同层次。做通话类 UI 建议统一用
AudioRouteSession —— 它区分”持久设置”与”通话中临时切换”,语义更清晰。热插拔
isMonitoring 可以回读监听状态。
比较两次枚举结果的差异可以用现成的工具函数:
实测的设备形态
在一台 HUAWEI nova 12 Pro(HarmonyOS 6.1)上:默认摄像头是后置。 做视频通话通常要显式指定前置 ——
用
CameraPosition.front(defaultCameraCaptureOptions() 已经是前置),
或按 deviceId 指定。