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

相关推荐
特立独行的猫a15 小时前
仓颉编程语言的并发编程:线程模型与使用实践
华为·线程·仓颉·仓颉语言
2501_9197490318 小时前
配置flutter鸿蒙的环境和创建并运行第一个flutter鸿蒙项目【精心制作】
flutter·华为·harmonyos
Fanmeang20 小时前
华为交换机VLAN技术详解:从基础到高级应用
运维·网络·华为·vlan·交换机·mux vlan
Fanmeang21 小时前
华为路由器核心技术详解:数据包的智能导航系统
运维·网络·华为·路由器·路由表·路由协议
赵得C1 天前
智能体的范式革命:华为全栈技术链驱动下一代AI Agent
人工智能·华为·ai·ai编程
wanhengidc1 天前
云手机的核心功能是什么
智能手机
wanhengidc1 天前
海外云手机是指什么
运维·服务器·游戏·智能手机·云计算
2501_916007471 天前
手机使用过的痕迹能查到吗?完整查询指南与步骤
android·ios·智能手机·小程序·uni-app·iphone·webview
Fanmeang1 天前
华为防火墙基础功能详解:构建网络安全的基石
运维·网络·安全·华为·防火墙·策略·安全域
爱笑的眼睛111 天前
深入解析ArkTS类型系统:构建安全高效的HarmonyOS应用
华为·harmonyos