鸿蒙开发如何与穿戴设备通讯

大家好,我是simple。我的理想是利用科技手段来解决生活中遇到的各种问题

之前在工作开发中完成了一些穿戴设备的业务一直没时间去整理,最近刚好有点空,就一起整理一下。

0. 准备工作

进入华为开发者联盟的"管理中心",点击"应用服务"页签下的"Wear Engine"卡片。

注意:该权限审核时长比较久,哪怕加急也要3、5天,所以如果用到了的话需要尽早去申请,免得误了大事。

点击放大

1. 项目配置

在工程项目中的module.json5中配置client_id,如果之前配置过请忽略。

json 复制代码
"metadata": [ // 配置如下信息
    {
        "name": "client_id",
        "value": "xxxxxx"
    }
]

2. 权限获取

ts 复制代码
// 步骤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 获取设备

ts 复制代码
// 获取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 通讯配置

在设备与设备通讯之前需要做一些准备工作

  1. 准备好手表应用的包名和appid,在通讯时需要使用
  2. 将当前应用的包名和appid在手机端与手表端配置好,如果没配置好会出现206、207等的报错,如果有多个包名,可以用逗号隔开(module.json5)
json 复制代码
metadata: [
    {
      "name": "wearEngineRemoteAppNameList",
      "value": "xxx.xxx.xxx"
    }
]

3.3 设备通讯

在设备通讯之前,可以先检查一下当前设备是否正常安装了需要通讯的设备,以及拉起远程设备的应用。

ts 复制代码
// 获取P2p模块的客户端
const p2pClient = wearEngine.getP2pClient(ctx)

// 当前是否安装
p2pClient.isRemoteAppInstalled(this.device.randomId, this.remoteBundleName)
  .then((isInstalled) => {
    if(isInstalled) {
        // 拉起远程app
       await p2pClient.startRemoteApp(targetDevice.randomId, '指定包名')
    }
  })
ts 复制代码
// 发送消息
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)
ts 复制代码
// 接收消息
p2pClient.registerMessageReceiver(this.device.randomId, appParam, callback)

注意:

  1. 设备通讯之间,只能发二进制数据,所以需要通过textEncoder.encodeInto转成对应格式。
  2. appParam就是在3.2准备好的手表包名和appid,格式如下。
css 复制代码
{
  remoteApp: {
    // 设置设备侧应用的应用信息:包名与指纹
    bundleName: '',
    fingerprint: ''
  }
}

思路总结

  1. 在开发过程中,首先通过wearEngine.AuthClient先申请当前应用获取手机连接穿戴设备服务的权限。
  2. 然后通过wearEngine.getDeviceClient获取客户端设备对象deviceClient。
  3. 通过客户端设备对象deviceClient.getConnectedDevices可以进一步获取当前手机连接的穿戴设备列表。
  4. 通过穿戴设备列表的类型和名称,就可以获取到指定的设备。
  5. 通过wearEngine内置的方法可以获取指定的客户端类,用于监听当前设备的状态、拉起服务、获取穿戴设备的传感器数据、双方通讯等方式。
相关推荐
安卓开发者1 天前
鸿蒙NEXT应用接入快捷栏:一键直达,提升用户体验
java·harmonyos·ux
HMS Core1 天前
消息推送策略:如何在营销与用户体验间找到最佳平衡点
华为·harmonyos·ux
Brianna Home1 天前
【案例实战】鸿蒙分布式调度:跨设备协同实战
华为·wpf·harmonyos
Bert丶seven1 天前
鸿蒙Harmony实战开发教学(No.4)-RichText组件基础到高阶介绍篇
华为·harmonyos·arkts·鸿蒙·鸿蒙系统·arkui·开发教程
鸿蒙小白龙1 天前
openharmony之分布式蓝牙实现多功能场景设备协同实战
分布式·harmonyos·鸿蒙·鸿蒙系统·open harmony
爱吃水蜜桃的奥特曼1 天前
玩Android Harmony next版,通过项目了解harmony项目快速搭建开发
android·harmonyos
鸿蒙小白龙1 天前
openharmony之分布式购物车开发实战
分布式·harmonyos·鸿蒙·鸿蒙系统·open harmony
鸿蒙小白龙1 天前
openharmony之分布式相机开发:预览\拍照\编辑\同步\删除\分享教程
分布式·harmonyos·鸿蒙·鸿蒙系统·open harmony
安卓开发者1 天前
鸿蒙NEXT鼠标光标开发完全指南
华为·计算机外设·harmonyos
●VON1 天前
重生之我在大学自学鸿蒙开发第九天-《分布式流转》
学习·华为·云原生·harmonyos·鸿蒙