HarmonyOS 鸿蒙Next开发如何与穿戴设备通讯
HarmonyOS 鸿蒙Next开发如何与穿戴设备通讯
大家好,我是simple。我的理想是利用科技手段来解决生活中遇到的各种问题。
0. 准备工作
进入华为开发者联盟的“管理中心”,点击“应用服务”页签下的“Wear Engine”卡片。
注意:该权限审核时长比较久,哪怕加急也要3、5天,所以如果用到了的话需要尽早去申请,免得误了大事。
1. 项目配置
在工程项目中的module.json5
中配置client_id
,如果之前配置过请忽略。
{
"metadata": [
{
"name": "client_id",
"value": "xxxxxx"
}
]
}
2. 权限获取
// 步骤1:获取AuthClient对象
let authClient: wearEngine.AuthClient = wearEngine.getAuthClient(getContext(this));
// 步骤2:基于需要用户授权的权限定义权限请求类
let request: wearEngine.AuthorizationRequest = {
permissions: [wearEngine.Permission.USER_STATUS]
}
注意:permissions为你当前申请的权限,与你在后台申请的权限需要对应上,如果没有申请上对应权限,会报1008500004
的错误。
权限枚举如下所示:
USER_STATUS
HEALTH_SENSOR
MOTION_SENSOR
DEVICE_IDENTIFIER
3. 设备通讯
3.1 获取设备
// 获取DeviceClient对象
const deviceClient = wearEngine.getDeviceClient(ctx)
// 获取已连接的穿戴设备
const deviceList = await this.deviceClient.getConnectedDevices()
// 获取指定穿戴设备
const targetDevice = deviceList.find(device => device.category === wearEngine.DeviceCategory.WATCH)
获取到设备列表之后,可以通过device的类别、名称、设备型号等进一步获取指定的设备。拿到设备后我们就可以对其进行下一步的操作了。
3.2 通讯配置
在设备与设备通讯之前需要做一些准备工作
- 准备好手表应用的包名和appid,在通讯时需要使用
- 将当前应用的包名和appid在手机端与手表端配置好,如果没配置好会出现206、207等的报错,如果有多个包名,可以用逗号隔开(
module.json5
)
metadata: [
{
"name": "wearEngineRemoteAppNameList",
"value": "xxx.xxx.xxx"
}
]
3.3 设备通讯
在设备通讯之前,可以先检查一下当前设备是否正常安装了需要通讯的设备,以及拉起远程设备的应用。
// 获取P2p模块的客户端
const p2pClient = wearEngine.getP2pClient(ctx)
// 当前是否安装
p2pClient.isRemoteAppInstalled(this.device.randomId, this.remoteBundleName)
.then((isInstalled) => {
if(isInstalled) {
// 拉起远程app
await p2pClient.startRemoteApp(targetDevice.randomId, '指定包名')
}
})
// 发送消息
const textEncoder: util.TextEncoder = new util.TextEncoder();
const messageStr = JSON.stringify(messageContent)
const message: wearEngine.P2pMessage = {
content: textEncoder.encodeInto(messageStr)
}
p2pClient.sendMessage(this.device.randomId, appParam, message)
// 接收消息
p2pClient.registerMessageReceiver(this.device.randomId, appParam, callback)
注意:
- 设备通讯之间,只能发二进制数据,所以需要通过
textEncoder.encodeInto
转成对应格式。 appParam
就是在3.2
准备好的手表包名和appid,格式如下。
{
remoteApp: {
// 设置设备侧应用的应用信息:包名与指纹
bundleName: '',
fingerprint: ''
}
}
思路总结
- 在开发过程中,首先通过
wearEngine.AuthClient
先申请当前应用获取手机连接穿戴设备服务的权限。 - 然后通过
wearEngine.getDeviceClient
获取客户端设备对象deviceClient
。 - 通过客户端设备对象
deviceClient.getConnectedDevices
可以进一步获取当前手机连接的穿戴设备列表。 - 通过穿戴设备列表的类型和名称,就可以获取到指定的设备。
- 通过
wearEngine
内置的方法可以获取指定的客户端类,用于监听当前设备的状态、拉起服务、获取穿戴设备的传感器数据、双方通讯等方式。
文章及代码使用版本为:HarmonyOS 5.0.5(17) Release SDK。
更多关于HarmonyOS 鸿蒙Next开发如何与穿戴设备通讯的实战教程也可以访问 https://www.itying.com/category-93-b0.html
感谢分享
牛逼
受教了,大佬
在HarmonyOS Next中与穿戴设备通讯的关键点如下:
-
权限申请是首要步骤,必须确保在Wear Engine中申请了正确的权限(USER_STATUS/HEALTH_SENSOR等),并在代码中通过AuthClient进行授权请求。
-
设备发现流程:
- 使用getDeviceClient获取设备客户端
- getConnectedDevices()获取已连接设备列表
- 通过DeviceCategory.WATCH筛选目标设备
- 跨设备通讯要点:
- 必须配置wearEngineRemoteAppNameList元数据
- 通讯前需检查isRemoteAppInstalled
- 消息传输需使用TextEncoder转为二进制格式
- appParam需包含目标设备的bundleName和fingerprint
-
典型通讯流程: 发送端:startRemoteApp() → sendMessage() 接收端:registerMessageReceiver()
-
常见错误处理:
- 1008500004:权限未正确申请
- 206/207:包名配置错误
建议在实际开发中,先确保基础连接和权限获取正常,再逐步实现业务逻辑。代码示例中提供的设备发现、消息收发等核心方法可直接参考使用。