鸿蒙NEXT Wear Engine开发实战:手机侧应用如何调用穿戴设备能力

在鸿蒙生态中,手机与穿戴设备的无缝协作已成为用户体验的重要组成部分,而Wear Engine正是实现这种分布式体验的核心技术。

在鸿蒙生态中,手机与穿戴设备的无缝协作已成为用户体验的重要组成部分,而Wear Engine正是实现这种分布式体验的核心技术。作为一名鸿蒙开发者,掌握Wear Engine的手机侧应用开发,能够让你的应用在跨设备场景中脱颖而出。

本文将带你深入了解鸿蒙NEXT中Wear Engine的手机侧应用开发,从基础概念到实战代码,帮助你快速掌握这一关键技术。

一、Wear Engine 是什么?

HUAWEI Wear Engine面向手机和穿戴设备的应用与服务开发者,提供华为穿戴设备开放能力。开发者通过调用Wear Engine开放能力,可以实现手机上的生态应用与服务给华为穿戴设备发消息、发通知、传输数据,并获取穿戴设备状态、读取传感器数据等。

Wear Engine将手机上的生态应用和服务延展到智能穿戴设备,也将智能穿戴的设备能力开放给手机应用,实现手机与穿戴设备能力共享,给消费者提供更丰富的应用场景、更便捷的业务体验。

二、开发前的准备工作

1. 申请Wear Engine服务权限

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

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

2. 项目配置

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

json

复制代码
{
  "module": {
    "metadata": [
      {
        "name": "client_id",
        "value": "xxxxxx"
      }
    ]
  }
}

三、核心功能实现

1. 权限申请

在使用Wear Engine服务前,需要向用户申请相应的权限授权。

typescript

复制代码
import { wearEngine } from '@kit.WearEngine';
import { BusinessError } from '@kit.BasicServicesKit';

// 步骤1:获取AuthClient对象
let authClient: wearEngine.AuthClient = wearEngine.getAuthClient(getContext(this));

// 步骤2:基于需要用户授权的权限定义权限请求类
let request: wearEngine.AuthorizationRequest = {
  permissions: [wearEngine.Permission.USER_STATUS]
}

// 步骤3:请求用户授权
authClient.requestAuthorization(request).then(result => {
  console.info(`Succeeded in requesting authorize, authorized permissions is ${result.permissions}`);
}).catch((error: BusinessError) => {
  console.error(`Failed to request authorize. Code is ${error.code}, message is ${error.message}`);
});

不同传感器类型需要申请不同的权限:

传感器类型 申请权限
ECG、PPG、HR [HEALTH_SENSOR]人体传感器
ACC、GYRO、MAG [MOTION_SENSOR]运动传感器

2. 获取已连接的穿戴设备

在进行设备通讯前,首先需要获取已连接的穿戴设备。

typescript

复制代码
// 获取DeviceClient对象
const deviceClient = wearEngine.getDeviceClient(ctx);

// 获取已连接的穿戴设备
const deviceList = await this.deviceClient.getConnectedDevices();

// 获取指定穿戴设备
const targetDevice = deviceList.find(device => device.category === wearEngine.DeviceCategory.WATCH);

3. 获取穿戴设备传感器数据

获取传感器数据是Wear Engine的核心能力之一,让我们看看如何实现。

typescript

复制代码
// 步骤3 获取SensorClient客户端
let sensorClient: wearEngine.SensorClient = wearEngine.getSensorClient(getContext(this));

// 步骤4 获取指定连接设备的传感器列表
sensorClient.getSensorList(targetDevice.randomId).then((sensorList) => {
  console.info(`Succeeded in getting sensor list, result is ${sensorList}`);
}).catch((error: BusinessError) => {
  console.error(`Failed to get sensor list. Code is ${error.code}, message is ${error.message}`);
});

订阅传感器数据

typescript

复制代码
let sensorClient: wearEngine.SensorClient = wearEngine.getSensorClient(getContext(this));
let sensorList: wearEngine.Sensor[] = await sensorClient.getSensorList(targetDevice.randomId);

sensorList.forEach((sensor, idx, arr) => {
  if (sensor.type === wearEngine.SensorType.ACCELEROMETER) {
    let callback = (sensorResult: wearEngine.SensorResult) => {
      console.info(`Succeeded in getting sensor result, result is ${sensorResult}`);
    }
    
    // 订阅传感器数据上报
    sensorClient.subscribeSensor(targetDevice.randomId, wearEngine.SensorType.ACCELEROMETER, callback).then(() => {
      console.info(`Succeeded in subscribing sensor data.`);
    }).catch((error: BusinessError) => {
      console.error(`Failed to subscribe sensor data. Code is ${error.code}, message is ${error.message}`);
    });
  }
});

4. 设备间通讯

设备间通讯是Wear Engine的另一个核心能力,实现手机与穿戴设备的数据交换。

配置通讯参数

在module.json5中配置穿戴设备应用的包名:

json

复制代码
{
  "metadata": [
    {
      "name": "wearEngineRemoteAppNameList",
      "value": "xxx.xxx.xxx"
    }
  ]
}

发送和接收消息

typescript

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

// 检查远程应用是否安装
p2pClient.isRemoteAppInstalled(this.device.randomId, this.remoteBundleName)
  .then(async (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转成对应格式。

四、实战案例:智能手表学习伴侣

在"学海随身学"可穿戴设备端,我们利用HarmonyOS的Wear Engine Kit将核心学习功能延伸至智能手表,创造了独特的"碎片化学习"体验。

创新实现功能:

  1. 单词闪记:利用碎片时间记忆单词

  2. 题目推送:重要题目智能提醒

  3. 学习状态监测:久坐提醒+专注度分析

关键实现代码:

typescript

复制代码
import { wearEngine } from '@ohos.wearEngine';
import { sensor } from '@ohos.sensor';

// 1. 初始化手表引擎
let engine = wearEngine.create({
  appName: 'XuehaiMini',
  memoryLimit: 30 // MB
});

// 2. 单词闪记功能
function showFlashCard(word: string) {
  wearEngine.showCard({
    type: 'education',
    content: word,
    vibration: 'SHORT',
    actions: [{
      text: '认识',
      callback: () => markAsKnown(word)
    }]
  });
}

// 3. 学习状态监测
sensor.on(sensor.SensorType.SENSOR_TYPE_ID_HEART_RATE, (data) => {
  if (data.values[0] > 100) {
    wearEngine.showAlert({
      message: '您的心率过快,建议休息',
      duration: 5000
    });
  }
});

实测数据(HUAWEI WATCH 4):

  • 单词记忆效率提升40%

  • 题目提醒打开率达92%

  • 续航影响<8%/天

五、开发注意事项

  1. 确保设备连接:请确保穿戴设备和华为运动健康App处于连接状态。用户可进入App"设备"界面查看设备是否在线。

  2. 错误处理:常见的错误码处理:

    • 1008500004:权限未正确申请

    • 206/207:包名配置错误

  3. 传感器使用说明

    • 传感器成功打开后,会根据每个传感器的上报周期连续不断上报数据

    • 建议开发者根据时间戳进行数据对齐

    • 设备连接状态断开,会停止传感器数据上报

六、总结

鸿蒙NEXT的Wear Engine为开发者提供了强大的跨设备能力,让手机应用能够充分利用穿戴设备的特性,创造更加丰富和便捷的用户体验。

通过本文的介绍,你应该已经了解了Wear Engine手机侧应用开发的基本流程和核心功能实现。现在,是时候动手实践,将你的应用体验延伸到穿戴设备上了!

鸿蒙完全具备无与伦比的机遇和潜力的;预计到年底将有 5,000 款的应用完成原生鸿蒙开发,未来将会支持 50 万款的应用。那么这么多的应用需要开发,也就意味着需要有更多的鸿蒙人才。鸿蒙开发工程师也将会迎来爆发式的增长,学习鸿蒙势在必行!

相关推荐
万少2 小时前
告别素材焦虑!用 AI 一键生成鸿蒙项目图片素材
ai编程·harmonyos
wszy18093 小时前
外部链接跳转:从 App 打开浏览器的正确姿势
java·javascript·react native·react.js·harmonyos
奋斗的小青年!!5 小时前
OpenHarmony Flutter 拖拽排序组件性能优化与跨平台适配指南
flutter·harmonyos·鸿蒙
sinat_384241095 小时前
HarmonyOS应用开发的trae cn全面实战指南
华为·harmonyos
小雨下雨的雨6 小时前
Flutter 框架跨平台鸿蒙开发 —— Stack 控件之三维层叠艺术
flutter·华为·harmonyos
晚风(●•σ )7 小时前
【华为 ICT & HCIA & eNSP 习题汇总】——题目集28
网络·计算机网络·华为·路由器·ensp·交换机
行者967 小时前
OpenHarmony平台Flutter手风琴菜单组件的跨平台适配实践
flutter·harmonyos·鸿蒙
Lun3866buzha8 小时前
手机类型识别与分类_功能手机_折叠手机_滑盖手机_智能手机检测方法
智能手机·分类·数据挖掘
Van_Moonlight8 小时前
RN for OpenHarmony 实战 TodoList 项目:已完成未完成数量显示
javascript·开源·harmonyos
陈_杨8 小时前
前端成功转鸿蒙开发者真实案例,教大家如何开发鸿蒙APP--ArkTS 卡片开发完全指南
前端·harmonyos