鸿蒙开发(NEXT/API 12)【状态查询与订阅】手机侧应用开发

注意

该接口的调用需要在开发者联盟申请设备基础信息权限与穿戴用户状态权限,穿戴用户状态权限还需获得用户授权。

  • 实时查询穿戴设备可用空间、电量状态。
  • 订阅穿戴设备连接状态、低电量告警、用户心率告警。
  • 查询和订阅穿戴设备充电状态、佩戴状态、设备模式。

使用该接口前,需要确保应用已申请相应权限同时向手机侧用户申请获取对应权限的授权,否则接口将调用失败。

穿戴设备状态与运动健康状态 申请权限 查询结果 订阅事件的触发条件 订阅结果
连接状态 设备基础信息 N/A - 2:手机连接设备成功
  • 3:手机与设备断开(断开蓝牙或拉远距离) | - 2:连接成功
  • 3:连接断开
  • 4:连接失败
  • 5:设备被删除 |
    | 可用空间 | 可用存储空间,单位:KB(例如:20480) | N/A | N/A | |
    | 电量状态 | 电量值(例如:97) | 设备电量减少1% (例如:由98%降到97%),且设备处于非充电状态 | 电量值(例如:97) | |
    | 充电状态 | - 1:设备正在充电状态
  • 2:设备为非充电状态
  • 3:设备正在充电,且为满电状态 | - 1:给设备进行充电
  • 2:设备停止充电
  • 3:设备达到充满电的状态 | - 1:充电开始
  • 2:充电结束
  • 3:充电完成 | |
    | 设备模式 | - -1:设备不支持模式切换
  • 0:设备处于智能模式
  • 1:设备处于超长续航模式 | - 0:设备从超长续航模式切到换智能模式
  • 1:设备从智能模式切换到超长续航模式 | - 0:设备处于智能模式
  • 1:设备处于超长续航模式 | |
    | 佩戴状态 | 穿戴用户状态[USER_STATUS](仅限企业开发者) | - 1:佩戴中
  • 2:未佩戴 | - 1:将穿戴设备戴在手腕上
  • 2:将穿戴设备由手腕摘下 | - 1:佩戴
  • 2:未佩戴 |
    | 心率告警 | N/A | - 1:静态心率连续10分钟高于上限值
  • 2:静态心率连续10分钟低于下限值
  • 3:运动心率过高
  • 4:运动心率过低备注:打开"运动健康App > 设备",在应用和服务列表中,点击"心率",设置相应的心率提醒。 | - 1:静态心率过高
  • 2:静态心率过低
  • 3:运动心率过高
  • 4:运动心率过低 | |

说明

  • 穿戴设备侧无对应的应用,手机侧应用也可以使用该能力获取穿戴设备状态。
  • 在查询或订阅穿戴设备电量、充电、佩戴、心率告警状态时,请确保穿戴设备和华为运动健康App处于连接状态。用户可进入App"设备"界面查看设备是否在线。开发者可调用[getConnectedDevices]或根据返回错误码了解设备是否已连接手机,如果设备未连接则提醒用户重新连接设备。
  • 查询和订阅佩戴状态、心率告警时,需要申请穿戴用户状态[USER_STATUS]权限。

查询设备状态

穿戴设备的状态可以调用[MonitorClient]对象中的[queryStatus]方法获取到。一次只能查询一个状态。

  1. 参见[已连接穿戴设备查询]章节,获取已连接设备列表。

  2. 参见[目标设备选择]章节,从已连接设备列表中选定需要通信的设备。

  3. 调用[wearEngine]中的[getMonitorClient]方法,获取[MonitorClient]对象。

  4. 调用[queryStatus]方法,查询指定指标状态。

    • 通过[MonitorItem]对象,查询指定指标状态。目前支持查询的状态如下:

      • "电量状态"字段:POWER_STATUS。
      • "充电状态"字段:CHARGE_STATUS。
      • "佩戴状态"字段:WEAR_STATUS。
      • "设备模式"字段:POWER_MODE。
      • "可用内存"字段:AVAILABLE_STORAGE_SPACE
    • 通过[MonitorData]对象,返回指定指标状态的查询结果。

    // 步骤3 获取MonitorClient对象
    let monitorClient: wearEngine.MonitorClient = wearEngine.getMonitorClient(getContext(this));

    // 步骤4 查询指定指标状态(以佩戴状态为例)
    monitorClient.queryStatus(targetDevice.randomId, wearEngine.MonitorItem.WEAR_STATUS).then((result: wearEngine.MonitorData) => {
    // 获取到所查状态的状态值,处理对应业务逻辑
    console.info(Succeeded in querying wear status, result is ${result.code}.);
    }).catch((error: BusinessError) => {
    // 处理调用失败时捕获到的异常
    console.error(Failed to query wear status. Code is ${error.code}, message is ${error.message}.);
    })

订阅设备状态

  1. 参见[已连接穿戴设备查询]章节,获取已连接的设备列表。

  2. 参见[目标设备选择]章节,从已连接设备列表中选定需要通信的设备。

  3. 调用[wearEngine]中的[getMonitorClient]方法,获取[MonitorClient]对象。

  4. 定义订阅任务的回调对象[callback]。

  5. 调用[subscribeEvent]方法,订阅指定指标状态变化的订阅。

    • 通过[MonitorEvent]对象,订阅穿戴设备与运动健康状态。目前支持的订阅状态如下:

      • "设备连接状态"字段: [EVENT_CONNECTION_STATUS_CHANGED]。
      • "电量降低状态"字段:[EVENT_BATTERY_LEVEL_DROPPED]。
      • "充电状态"字段: [EVENT_CHARGE_STATUS_CHANGED]。
      • "佩戴状态"字段:[EVENT_WEAR_STATUS_CHANGED]。
      • "心率告警"字段:[EVENT_HEART_RATE_ALARM]。
      • "设备模式"字段:[EVENT_POWER_MODE_CHANGED]。
    • 通过[Callback] <[MonitorEventData] >对象,返回设备状态的订阅结果。

    // 步骤3 获取MonitorClient对象
    let monitorClient: wearEngine.MonitorClient = wearEngine.getMonitorClient(getContext(this));

    // 步骤4 定义回调函数
    let callback = (monitorEventData: wearEngine.MonitorEventData) => {
    // 处理监听到状态变化后的业务逻辑
    console.info(Succeeded in listening change of ${monitorEventData.event}, the new status is ${monitorEventData.data}.)
    }

    // 步骤5 调用订阅方法
    monitorClient.subscribeEvent(targetDevice.randomId, wearEngine.MonitorEvent.EVENT_WEAR_STATUS_CHANGED, callback).then(() => {
    console.info(Succeeded in subscribing wear status.);
    }).catch((error: BusinessError) => {
    console.error(Failed to subscribe wear status. Code is ${error.code}, message is ${error.message}.);
    })

  6. 调用[unsubscribeEvent] 方法,解除穿戴设备状态变化的订阅。(需要传入订阅时使用的回调函数对象)

    // 步骤6 取消订阅,取消订阅时需要传入与订阅时相同的回调函数对象才可正常取消订阅
    monitorClient.unsubscribeEvent(targetDevice.randomId, wearEngine.MonitorEvent.EVENT_WEAR_STATUS_CHANGED, callback).then(() => {
    console.info(Succeeded in unsubscribing wear status);
    }).catch((error: BusinessError) => {
    console.error(Failed to unsubscribe wear status. Code is ${error.code}, message is ${error.message}.);
    })

最后呢

很多开发朋友不知道需要学习那些鸿蒙技术?鸿蒙开发岗位需要掌握那些核心技术点?为此鸿蒙的开发学习必须要系统性的进行。

而网上有关鸿蒙的开发资料非常的少,假如你想学好鸿蒙的应用开发与系统底层开发。你可以参考这份资料,少走很多弯路,节省没必要的麻烦。由两位前阿里高级研发工程师联合打造的《鸿蒙NEXT星河版OpenHarmony开发文档 》里面内容包含了(ArkTS、ArkUI开发组件、Stage模型、多端部署、分布式应用开发、音频、视频、WebGL、OpenHarmony多媒体技术、Napi组件、OpenHarmony内核、Harmony南向开发、鸿蒙项目实战等等)鸿蒙(Harmony NEXT)技术知识点

如果你是一名Android、Java、前端等等开发人员,想要转入鸿蒙方向发展。可以直接领取这份资料辅助你的学习。下面是鸿蒙开发的学习路线图。

针对鸿蒙成长路线打造的鸿蒙学习文档。话不多说,我们直接看详细鸿蒙(OpenHarmony )手册(共计1236页)与鸿蒙(OpenHarmony )开发入门视频,帮助大家在技术的道路上更进一步。

  • 《鸿蒙 (OpenHarmony)开发学习视频》
  • 《鸿蒙生态应用开发V2.0白皮书》
  • 《鸿蒙 (OpenHarmony)开发基础到实战手册》
  • OpenHarmony北向、南向开发环境搭建
  • 《鸿蒙开发基础》
  • 《鸿蒙开发进阶》
  • 《鸿蒙开发实战》

总结

鸿蒙---作为国家主力推送的国产操作系统。部分的高校已经取消了安卓课程,从而开设鸿蒙课程;企业纷纷跟进启动了鸿蒙研发。

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

相关推荐
Android技术栈4 小时前
鸿蒙开发(NEXT/API 12)【硬件(传感器开发)】传感器服务
华为·硬件架构·harmonyos·鸿蒙·鸿蒙系统·openharmony·传感器
h177113472054 小时前
相亲交友系统源码中的数据安全策略
大数据·网络·安全·系统架构·vr·交友
OH五星上将5 小时前
【移植】一种快速移植OpenHarmony Linux内核的方法
linux·运维·驱动开发·嵌入式硬件·harmonyos·openharmony·鸿蒙内核
深海的鲸同学 luvi5 小时前
HarmonyOS/OpenHarmony 如何将rawfile中文件复制到沙箱中
华为·harmonyos·文件操作·解压·h5离线加载·拷贝
helloxmg5 小时前
鸿蒙harmonyos next flutter通信之EventChannel获取ohos系统时间
flutter·华为·harmonyos
90后的晨仔6 小时前
UIAbility、ExtensionAbility、HAP、AbilityStage在运行期和编译器的关系
harmonyos
lfsun6666 小时前
【60天备战2024年11月软考高级系统架构设计师——第29天:微服务架构——微服务的优缺点】
微服务·架构·系统架构
90后的晨仔6 小时前
UIAbility相关的基础知识概念介绍
harmonyos
weixin_430750938 小时前
防火墙的区域划分+来自公网、内网的ip欺骗攻击+防御
运维·网络·网络协议·tcp/ip·华为·安全威胁分析