鸿蒙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 万款的应用。那么这么多的应用需要开发,也就意味着需要有更多的鸿蒙人才。鸿蒙开发工程师也将会迎来爆发式的增长,学习鸿蒙势在必行!

相关推荐
好好学习啊天天向上4 小时前
Android Studio 撕开安卓手机投屏
android·智能手机·android studio
Damon小智4 小时前
仓颉 Markdown 解析库在 HarmonyOS 应用中的实践
华为·typescript·harmonyos·markdown·三方库
ZIM学编程5 小时前
把握鸿蒙生态红利:HarmonyOS 应用开发学习路径与实战课程推荐
学习·华为·harmonyos
limingade1 天前
手机转SIP-手机做中继网关-落地线路对接软交换呼叫中心
android·智能手机·手机转sip·手机做sip中继网关·sip中继
安卓开发者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