7.1 设备发现与分布式软总线


7.1 设备发现与分布式软总线

本节摘要:分布式软总线是 HarmonyOS 设备组网的底座:自动发现、可信认证、统一通信。本节搭建双模拟器环境,理解软总线的工作分层与开发者侧的配置要点,为 7.2 的跨设备流转打地基。

两台设备如何相遇

先做实验环境。打开 DevEco Studio 的 Device Manager,再创建一个平板形态的模拟器实例,与已有的手机实例并存。两台模拟器(或真机)登录同一账号后,分布式软总线会把它们组成一个"超级终端"——逻辑上是一台设备,物理上是两台。

软总线做的事可以拆成三层来理解。发现层:设备在同一局域网或开启蓝牙的场景下互相感知,同账号是互信的前提,不需要用户手动"配对"。连接层:建立加密通道,认证由账号体系背书,应用不必自行实现握手协议。通信层:给上层提供统一的跨设备调用与数据传输接口——位置写的是"设备 A 的某能力",软总线负责路由到设备 B。对开发者的意义:设备差异在软总线这一层被抹平,你按"逻辑设备"编程

图:分布式软总线组网与开发者视角

图:分布式软总线组网与开发者视角

开发者侧要做什么

好消息是:软总线本身对应用透明,你不写组网代码。开发者侧的动作集中在配置与权限。跨设备协同相关的权限(设备信息、分布式能力)按第 6.2 节的流程声明;其中部分权限属于 ACL 管控级别,需要在配置中补申请理由并经平台审核,这在开发期会表现为"权限声明了但接口报无权限",是本章最常见的拦路虎——遇到先查权限级别,再查 ACL 申请状态。

设备选择的用户界面由系统的超级终端入口提供(控制中心的超级终端面板),开发者也可以在自己的界面里提供"选择目标设备"的列表。7.2 的迁移接口需要一个目标设备标识,来源就是这个选择动作。

动手环节:把两个模拟器都启动,在手机模拟器的设置里确认账号登录,平板同样。然后写一段最小代码枚举可信设备(设备发现接口按文档版本略有差异,以你 SDK 的声明为准),把设备名打到 hilog。预期输出:列表里能看到平板。如果为空,排查三件事:账号是否相同、两个实例是否都在线、权限是否声明齐全。这个"能看到对方"的状态就是下一节一切操作的前提,值得花时间确保稳定复现。

机制深一层:为什么值得这样设计

软总线的"总线"是个有来历的词。计算机体系结构里,总线是各部件间的公共传输通道,CPU、内存、外设都挂在上面,谁发数据谁收数据由总线协议裁决。分布式软总线把这个隐喻搬到了设备之间:手机、平板、手表都挂上这条逻辑总线,一台设备的摄像头、屏幕、算力对另一台设备而言就像主板上的部件一样可寻址。这个设计选择解释了后面所有接口的形态——为什么跨设备调用看起来像本地调用、为什么迁移不需要你序列化整个应用状态:总线层面的同构性已经把异构性吸收掉了。

代价也存在:抽象越深,出问题时越难看清。跨设备调用卡顿,可能是网络、可能是对端负载、可能是权限被拒——第 8 章的调试与性能工具在分布式场景的价值因此加倍。我的建议是分布式功能一律做超时与失败兜底,把"对端不可用"当成一等公民的分支来写,而不是异常路径的补丁。

⚠️ 常见坑:只在模拟器对上测试分布式功能。模拟器的账号与网络环境经过简化,真机之间(尤其跨网络形态,比如一台走 WiFi 一台走蓝牙)行为差异不小,发布前必须真机双人测试。

💡 关键直觉:软总线把"信任"从应用层挪到了账号层——同账号即互信。所以分布式功能的产品设计要先问"用户的两台设备大概率同账号吗",答案是否的话,协同价值就要重新估量。

本节要点回顾:

  • 三层拆解:发现层互相感知、连接层账号背书加密、通信层统一接口抹平设备差异。
  • 开发者动作:不写组网代码,管好权限声明与 ACL 级别申请。
  • 环境前置:同账号、双实例在线、"能看到对方"稳定复现是 7.2 的前提。
  • 总线隐喻:设备如主板部件般可寻址,异构性在总线层被吸收。
  • 兜底纪律:对端不可用是一等分支,超时与降级必写。

补一堂课:分布式硬件能力的一个样本

软总线"抹平设备差异"的说法,值得用一个具体样本落地。分布式相机是文档里最常见的示例场景:手机 A 上运行的应用,调用设备 B 上的摄像头拍照。开发者侧的体验是——申请分布式设备相关权限后,通过分布式设备管理接口拿到可信设备列表,选择目标设备,再以"远程"方式调用相机框架,后续的拍照流程与本地调用几乎一致。你不必写任何"把请求传到对端"的传输代码,路由由软总线完成。

这个样本的教学价值不在相机本身,而在它揭示的编程模型:能力调用按"设备加能力"寻址,而不是按"本机硬件"寻址。想通这一点,你能自行设计出很多文档里没有的场景——用平板的麦克风做手机的语音输入、用车机屏幕显示手表上的运动数据。当然,每个真实场景还要过两道关:产品关(这种跨设备组合对用户真的更顺手吗)与工程关(时延、电量、失败兜底)。分布式能力给了你画布,但画什么仍取决于产品判断,这是第 8 章质量思维的又一次预演。

环境演练的问题清单

把 7.1 的动手环节升级成一张可勾选的清单,建议逐项打勾后再进入 7.2:

  • 两个模拟器实例同时在线,且都能独立运行应用;
  • 两端账号一致,系统设置里可确认;
  • 设备枚举接口能稳定看到对方(连续刷新三次结果一致);
  • 涉及的分布式权限已声明,日志无权限报错;
  • 断开一端后枚举列表正确移除该设备,恢复后重新出现。

最后两项最容易被跳过,但它们验证的是"组网状态与真实状态同步"——迁移体验的可靠性直接依赖这一点。清单全绿,你的超级终端才算真正就位。

顺手交代一个观察手段:分布式场景的日志分布在两台设备上,排查时要在两端各开一个日志窗口、用同一个 TAG 过滤,对照时间线看消息往返。单端日志只能看到半场对话,这是分布式调试与单机调试在操作习惯上的最大不同,提前适应它,7.2 的迁移实验会顺利得多。

如果枚举列表始终为空且账号确认一致,还有一个低频但真实存在的原因:两端不在同一局域网且蓝牙不可用,软总线没有可用链路。模拟器对这类网络条件的模拟有限,真机排查时把两台设备拉进同一个 WiFi 再刷新列表,多数"玄学为空"到此就解了。

设备已经连成一个逻辑整体。下一节让页面真正搬家:用 continuation 接口把正在编辑的备忘从手机迁到平板,并搞清哪些状态应该随行。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U