harmony 鸿蒙分布式Extension开发指南
分布式Extension开发指南
简介
随着用户不同种类的终端设备数量不断增多,将不同设备作为本端设备能力的扩展,使设备之间协同合作完成各种复杂场景即为设备的分布式业务。
用户使用单账号在不同终端设备上使用较为繁琐,针对此类场景,提供了跨端操作的能力,例如手机侧应用APP 涉及与手表等设备互联协同,提供消息同步机制。
能力范围
数据交互:实现跨设备数据传输,包括文本信息、字节流、图片、传输流(三方应用仅支持文本信息交互能力)。
亮点特征
在应用跨设备协同过程中,当终端A处于后台而终端B保持前台运行时,系统可借助分布式消息服务激活分布式扩展组件,从而实现信息跨设备同步传输。例如,手机侧应用运行在后台,手表侧应用运行在前台时,上行消息通过DMS(Distributedsched Management Service)拉起DistributedExtension,从而实现手表侧消息回复同步至手机侧应用服务。
基本概念
在进行应用跨设备互联协同开发前,开发者应了解以下基本概念:
- DMS
DMS(Distributedsched Management Service)是分布式组件管理框架,提供分布式组件的管理能力。 * UIAbility
描述应用程序的界面交互能力,负责管理应用界面的生命周期、用户交互以及界面渲染等任务。 * Extension
用于扩展应用的功能或实现跨设备协同。它允许应用在后台运行某些任务,或者将部分功能迁移到其他设备上执行,从而实现分布式能力。 * 字节流
字节流是数据类型为ArrayBuffer类型的数据。可以被用于存储二进制数据,例如图像或音频数据。 * 传输流
可进行图片、音频、文本信息和字节流。
实现原理
设备A应用集成DistributedExtension,当设备A侧分布式软总线收到应用的消息时,通过DistributedExtension拉起设备A侧应用后台服务,设备A侧应用后台服务将设备B侧应用消息发送到应用服务。
约束与限制
- 设备间需要登录相同的华为账号。
- 不同设备间只有相同bundleName的UIAbility应用才能进行协同。
环境准备
环境要求
可登录华为账号的设备A和设备B,设备间需要组网成功(双端登录同一个华为账号,并使用蓝牙连接)。
搭建环境
- 在PC上安装DevEco Studio,要求版本在4.1及以上。
- 将public-SDK更新到API 20或以上,更新SDK的具体操作可参见更新指南。
- 打开设备A和设备B的蓝牙,互相识别,实现组网。
检验环境是否搭建成功
将设备A与B连接至PC并在PC上执行shell命令:
hdc shell
hidumper -s 4700 -a "buscenter -l remote_device_info"
组网成功时可显示组网设备数量的信息,如“remote device num = 1”。
开发指导
应用跨设备连接管理可以通过分布式操作系统,实时处理终端应用后台消息,为用户提供更加高效的体验。
接口说明
分布式扩展能力API的接口使用指导请参见DistributedExtensionAbility API参考。
接口名 | 描述 |
---|---|
onCreate(want: Want): void; | 分布式协同触发创建。 |
onDestroy(): void; | 分布式协同销毁 。 |
onCollaborate(wantParam: Record): AbilityConstant.CollaborateResult; | 分布式协同有请求时时回调。 |
开发步骤
- 在配置文件中注册
Extension
组件。
在应用配置文件 module.json5
中新增 "extensionAbilities"
字段,其中注册类型 "type"
设置为 "distributed"
,元数据信息“metadata”新增一个 "name"
为 "ohos.extension.DistributedExtension"
的条目。
DistributedExtensionAbility配置文件示例:
"extensionAbilities": [
{
"name": "EntrydistributedAbility",
"srcEntry": "./ets/entrybackupability/EntryDistributedAbility.ets",
"type": "distributed",
"exported": false,
"metadata": [
{
"name": "ohos.extension.DistributedExtension",
}
],
"srcEntry": "./ets/common/MDSExtension.ts",
}
]
- 导入开发所需模块。
import { AbilityConstant, Want } from '@kit.AbilityKit';
import { abilityConnectionManager, DistributedExtensionAbility } from '@kit.DistributedServiceKit';
- 开发者可以自定义
MDSExtension.ets
文件,类中继承DistributedExtensionAbility
,通过重写其onCreate、onDestroy
和onCollaborate
方法,使其达到在分布式能力扩展的创建、销毁和连接回调的使用。
下面的示例展示了一个空实现的 MDSExtension.ets
文件,根据对应日志可观测其生命周期:
import { AbilityConstant, Want } from '@kit.AbilityKit';
import { abilityConnectionManager, DistributedExtensionAbility } from '@kit.DistributedServiceKit';
export default class DistributedExtension extends DistributedExtensionAbility {
onCreate(want: Want) {
console.info(`DistributedExtension Create ok`);
console.info(`DistributedExtension on Create want: ${JSON.stringify(want)}`);
console.info(`DistributedExtension on Create end`);
}
onCollaborate(wantParam: Record<string, Object>) {
console.info(`DistributedExtension onCollabRequest Accept to the result of Ability collaborate`);
let sessionId = -1;
const collaborationValues = wantParam["CollaborationValues"] as abilityConnectionManager.CollaborationValues;
if (collaborationValues == undefined) {
return sessionId;
}
console.info(`onCollab, collaborationValues: ${JSON.stringify(collaborationValues)}`);
return AbilityConstant.CollaborateResult.ACCEPT;
}
onDestroy() {
console.info(`DistributedExtension onDestroy ok`);
}
}
常见问题
设备A侧回复消息设备B侧未收到
可能原因
设备间没有相互组网,导致设备A侧与设备B连接超时。
解决措施
设备A和设备B开启USB调试功能,用USB线连接设备和PC。执行shell命令:
hdc shell
hidumper -s 4700 -a "buscenter -l remote_device_info"
回显信息为“remote device num = 0”即为组网失败,请确保登录同一华为账号并使用蓝牙连接。组网成功时可显示组网设备数量的信息,如“remote device num = 1”。
应用长时间未操作,正在执行的协同业务被断开
可能原因
应用在协同过程中,DMS会对进程的生命周期进行监听。发生操作持续十秒后,会被结束协同进程的状态。
解决措施
重新发消息触发进程重新拉起。
你可能感兴趣的鸿蒙文章
harmony 鸿蒙Distributed Service Kit(分布式管理服务)
harmony 鸿蒙UIAbility与UIAbility连接开发指南
- 所属分类: 后端技术
- 本文标签:
热门推荐
-
2、 - 优质文章
-
3、 gate.io
-
8、 golang
-
9、 openharmony
-
10、 Vue中input框自动聚焦