鸿蒙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) {// 拉起远程appawait 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将核心学习功能延伸至智能手表,创造了独特的"碎片化学习"体验。
创新实现功能:
单词闪记:利用碎片时间记忆单词
题目推送:重要题目智能提醒
学习状态监测:久坐提醒+专注度分析
关键实现代码:
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%/天
五、开发注意事项
确保设备连接:请确保穿戴设备和华为运动健康App处于连接状态。用户可进入App"设备"界面查看设备是否在线。
错误处理:常见的错误码处理:
1008500004:权限未正确申请
206/207:包名配置错误
传感器使用说明:
传感器成功打开后,会根据每个传感器的上报周期连续不断上报数据
建议开发者根据时间戳进行数据对齐
设备连接状态断开,会停止传感器数据上报
六、总结
鸿蒙NEXT的Wear Engine为开发者提供了强大的跨设备能力,让手机应用能够充分利用穿戴设备的特性,创造更加丰富和便捷的用户体验。
通过本文的介绍,你应该已经了解了Wear Engine手机侧应用开发的基本流程和核心功能实现。现在,是时候动手实践,将你的应用体验延伸到穿戴设备上了!
鸿蒙完全具备无与伦比的机遇和潜力的;预计到年底将有 5,000 款的应用完成原生鸿蒙开发,未来将会支持 50 万款的应用。那么这么多的应用需要开发,也就意味着需要有更多的鸿蒙人才。鸿蒙开发工程师也将会迎来爆发式的增长,学习鸿蒙势在必行!