当前位置: 首页 > news >正文

HarmonyOS Connect原子化服务功能开发(Wi-Fi/Combo)设备控制开发与实现(二)

规设备控制

  1. 在“device”目录下的“DeviceApplication.java”文件中,在onInitialize函数中初始化应用。示例代码如下:

    @Override
    public void onInitialize() {AiLifeServiceHelper.initApplication(this);DeviceHandlerAbility.register(this, "");super.onInitialize();
    }@Override
    public void onEnd() {super.onEnd();DeviceHandlerAbility.deregister();AiLifeServiceHelper.disconnect();
    }
    

  2. 在“device”目录下的“DeviceHandlerAbility.java”文件中,连接智慧生活基础服务。

    进入到控制界面后,在onStart函数里解析传递过来的参数,并且添加连接设备管理服务的操作。连接服务成功之后,进行构建HiLinkDeviceHelper对象、设置数据回调、订阅设备变化事件和获取设备相关信息等操作。示例代码如下:

    private AbilityContext abilityContext;/*** 连接智慧生活基础服务,并订阅设备事件,获取设备信息*/
    private void connectAiLifeService() {abilityContext.getGlobalTaskDispatcher(TaskPriority.DEFAULT).asyncDispatch(() -> {int result = AiLifeServiceHelper.connect(abilityContext);if (result < ConnectResult.SERVICE_OK) {// TODO: result<0,连接服务失败,直接退出应用} else {// TODO: result>0,连接服务成功,进行构建HiLinkDeviceHelper对象、设置数据回调、订阅设备变化事件和获取设备相关信息等操作hiLinkDeviceHelper = new HiLinkDeviceHelper(deviceId);hiLinkDeviceHelper.setHiLinkDataCallback(hiLinkDataCallback);hiLinkDeviceHelper.subscribeDeviceEvent();hiLinkDeviceHelper.getHiLinkDevice();}});
    }
    


    连接服务返回编码如表1所示。

    参数类型数值描述
    SERVICE_UNAVAILABLE-1代理注册服务无效。
    NO_PERMISSION-2没有权限。
    REGION_NOT_SUPPORT-3当前地区不支持。
    NO_SIGN_INFO-4无协议签署记录,建议重新拉取协议签署页面。
    PRIVACY_UPDATED-5隐私有更新,建议重新拉取协议签署页面。
    SERVICE_HAS_UNBIND-6服务已断开。
    INVALID_PARAMETER-7参数无效。
    SERVICE_OK0代理注册成功。
    CLIENT_NEED_UPGRADE1代理版本需要升级。
    SERVICE_NEED_UPGRADE2服务版本需要升级。
    SERVICE_ALREADY_CONNECT3服务已绑定。
  3. 在“device”目录下的“HiLinkDeviceHelper.java”文件中,构建DeviceManager设备控制对象。示例代码如下:

    public class HiLinkDeviceHelper implements DataCallback<String> {private HiLinkDevice mHiLinkDevice;private final String deviceId;private final DeviceManager deviceManager;private HiLinkDataCallback hiLinkDataCallback;/*** 构造方法** [url=home.php?mod=space&uid=3142012]@param[/url] deviceId 设备deviceId*/public HiLinkDeviceHelper(String deviceId) {this.deviceId = deviceId;AiLifeServiceParamBuilder builder = new AiLifeServiceParamBuilder();builder.addScope(ApiParameter.Scope.FEATURE_REQUEST_CLOUD).addScope(ApiParameter.Scope.FEATURE_CLOUD_CONTROL);PacMapEx parameters = builder.createParameters();deviceManager = (DeviceManager) AiLifeServiceHelper.getService(AiLifeServiceHelper.DEVICE_MANAGER_SERVICE, parameters);}...
    }
    

  4. 在“device”目录下的“HiLinkDeviceHelper.java”文件中,订阅设备变化事件。

    在订阅设备变化事件中可以监听到该设备状态信息返回值,从而可以刷新设备对应状态(如设备开关状态等)。示例代码如下:

    /*** 订阅设备变化事件*/
    public void subscribeDeviceEvent() {List<String> listParam = new ArrayList<>();listParam.add(deviceId);Objects.requireNonNull(deviceManager).subscribeDeviceEvent(new DeviceListener.Builder().addDeviceAddListener(hiLinkDevice -> {// TODO: 有新设备添加,进行页面刷新}).addDeviceDeleteListener(s -> {// TODO: 监听设备删除变化,进行页面刷新}).addDeviceAttachListener(list -> {// TODO: 设备关联状态发生变化,进行页面刷新}).addDeviceInfoListener(listParam, (s, hiLinkDevice) -> {// TODO: 监听设备基本信息变化,比如在线/离线等改变,进行页面刷新}).addProfileDataListener(deviceId, profileDataChangeEntity -> {// TODO: 监听设备属性变化,如开关等,进行页面刷新}).build());
    }
    

  5. 在“device”目录下的“HiLinkDeviceHelper.java”文件中,获取设备的相关信息。示例代码如下:

    import com.huawei.ailife.service.kit.model.ServiceEntity;
    .
    public class HiLinkDeviceHelper implements DataCallback<String> {private HiLinkDevice mHiLinkDevice;.../*** 获取服务下所挂设备*/public void getHiLinkDevice() {Objects.requireNonNull(deviceManager).getHiLinkDevice(ApiParameter.Source.FROM_CLOUD, deviceId, new DataCallback<HiLinkDevice>() {@Overridepublic void onSuccess(HiLinkDevice hiLinkDevice) {Objects.requireNonNull(hiLinkDataCallback).onSuccess(DataType.GET_DEVICE, ZSONObject.toZSONString(hiLinkDevice));mHiLinkDevice = hiLinkDevice;getProfileData();}@Overridepublic void onFailure(int i, String s) {// TODO: 获取获取服务下所挂设备失败}});}/*** 获取服务的数据*/private void getProfileData() {Objects.requireNonNull(mHiLinkDevice).getProfileData(ApiParameter.Source.FROM_CLOUD, new ArrayList<>(), new DataCallback<List<ServiceEntity>>() {@Overridepublic void onSuccess(List<ServiceEntity> serviceEntities) {// TODO: 获取成功之后,进行页面刷新}@Overridepublic void onFailure(int i, String s) {// TODO: 获取服务数据失败}});}
    }
    

  6. 在“device”目录下的“HiLinkDeviceHelper.java”文件中,给设备下发命令,示例代码如下:

    /*** 给设备下发命令** @param serviceId 要控制的设备服务的ID* @param params    控制的参数*/
    public void sendCommand(String serviceId, String params) {CommandParam.Builder builder = new CommandParam.Builder().type(ApiParameter.CommandType.SERVICE_ID) // 要控制的设备服务的类型.serviceId(serviceId) // 要控制的设备服务的ID(例如:设备的开关按钮的服务ID是:"switch").mode(ApiParameter.CommandMode.MODE_AUTO); // 控制方式if (!TextUtils.isEmpty(params)) {ZSONObject zsonObject = ZSONObject.stringToZSON(params);for (String key : zsonObject.keySet()) {builder.addCharastic(key, zsonObject.get(key)); // 控制的参数(例如:设备的开关按钮,开的控制参数是:{on:1})}}CommandParam commandParam = builder.build();mHiLinkDevice.sendCommand(commandParam, this);
    }
    


    本文主要引用整理自官方文档。

相关文章:

HarmonyOS Connect原子化服务功能开发(Wi-Fi/Combo)设备控制开发与实现(二)

规设备控制 在“device”目录下的“DeviceApplication.java”文件中&#xff0c;在onInitialize函数中初始化应用。示例代码如下&#xff1a; Override public void onInitialize() {AiLifeServiceHelper.initApplication(this);DeviceHandlerAbility.register(this, "&qu…...

浅析 Makefile

Makefile逻辑 Makefile就是将一系列的工作流串在一起自动执行&#xff0c;构成Makefile最基本的要素是目标、依赖、命令。也就是为了实现目标需要哪些依赖并执行什么样的命令。 target: dependences1 dependences2 ... command1 command2 ...其中&#xff0c;target表示要生…...

保护品牌线上声誉的5种方法

我们如今生活在一个搜索便捷的世界&#xff0c;对于一个企业和个人来说&#xff0c;品牌的线上声誉也尤为重要。在客户考虑与您的公司开展业务之前&#xff0c;他们理所当然会先使用众多软件和平台搜索相关信息&#xff0c;以帮助他们了解和做决定。 因此&#xff0c;您的品牌…...

Java多重选择结构,超详细整理,适合新手入门

目录 一、什么是多重选择结构&#xff1f; 二、if 语句的语法 1、什么是嵌套if语句&#xff1f; 2、if 语句循环基本用法&#xff1a; 3、案例&#xff1a; 二、if...else多重选择结构语法 1、什么是if-else语句&#xff1f; 2、if...else 循环基本用法 3、案例&#…...

SCI写作,一定要避开这些“雷点”!

SCI论文写作中&#xff0c;除了要符合各部分的写作要求&#xff0c;还有许多细节问题需要我们注意&#xff0c;不然可能一不小心就会“踩雷”。 今天我们就来和大家分享SCI各个部分写作时的注意事项。 下面就进入正题&#xff01; SCI写作注意事项 01 标题的拟定 1.避免使用无…...

3GPP-NR Band14标准定义频点和信道(3GPP V17.7.0 (2022-12))

Reference test frequencies for NR operating band n14 Table 4.3.1.1.1.14-1: Test frequencies for NRoperating band n14 and SCS 15 kHz CBW [MHz]carrierBandwidth...

分库分表索引设计:分布式环境下的 主键索引、二级索引、全局索引的最佳设计实践

文章目录主键选择索引设计全局表唯一索引总结结语主键选择 对主键来说&#xff0c;要保证在所有分片中都唯一&#xff0c;它本质上就是一个全局唯一的索引。如果用大部分同学喜欢的自增作为主键&#xff0c;就会发现存在很大的问题。 因为自增并不能在插入前就获得值&#xf…...

2023年全国最新保安员精选真题及答案

百分百题库提供保安员考试试题、保安职业资格考试预测题、保安员考试真题、保安职业资格证考试题库等&#xff0c;提供在线做题刷题&#xff0c;在线模拟考试&#xff0c;助你考试轻松过关。 一、单选题&#xff08;1-480题&#xff09;以下备选答案中只有一项最符合题目要求&a…...

计算机网络之http07 http2,http3

HTTP1.2 http1.2都做了哪些优化 (1)头部压缩 使用HPACK压缩头部 头部冗长&#xff0c;大量重复字段 &#xff08;2&#xff09;二进制帧 将报文头部和内容字符编码改为二进制格式 字符编码未压缩 &#xff08;3&#xff09;并发传输 解决h1.1 队头阻塞问题&#xff0c;多车道 …...

内网渗透(二十五)之Windows协议认证和密码抓取-使用Hashcat和在线工具破解NTLM Hash

系列文章第一章节之基础知识篇 内网渗透(一)之基础知识-内网渗透介绍和概述 内网渗透(二)之基础知识-工作组介绍 内网渗透(三)之基础知识-域环境的介绍和优点 内网渗透(四)之基础知识-搭建域环境 内网渗透(五)之基础知识-Active Directory活动目录介绍和使用 内网渗透(六)之基…...

TongWeb8防止System.exit代码导致的进程停止

现象&#xff1a;当应用中存在System.exit 、Runtime.exit代码执行时&#xff0c;会导致TongWeb进程停止&#xff0c;从而产生如下日志&#xff1a;2023-02-14 09:47:36 [WARN] - The web application [webtest01] is still processing a request that has yet to finish. This…...

PMP每年考几次,费用如何?

一&#xff0c;PMP每年考几次&#xff0c;怎么准备&#xff1f; PMP项目管理证书是美国PMI发起的在全球200多个国家进行的项目管理专业人士资格认证&#xff0c;它的含金量和给认证者带来的作用已经很明显。 PMP考试是项目管理专业人士资格认证考试&#xff0c;通过PMP考试是…...

【Kubernetes】【一】Kubernetes介绍

Kubernetes介绍 应用部署方式演变 在部署应用程序的方式上&#xff0c;主要经历了三个时代&#xff1a; 传统部署&#xff1a;互联网早期&#xff0c;会直接将应用程序部署在物理机上 优点&#xff1a;简单&#xff0c;不需要其它技术的参与 缺点&#xff1a;不能为应用程序定…...

C语言:结构体

往期文章 C语言&#xff1a;初识C语言C语言&#xff1a;分支语句和循环语句C语言&#xff1a;函数C语言&#xff1a;数组C语言&#xff1a;操作符详解C语言&#xff1a;指针详解 目录往期文章前言1. 结构体的声明2. 结构体变量的定义和初始化3. 结构体成员的访问3. 结构体传参…...

搭建pclpy环境与读取pandaset数据并转换为pkl格式为pcd格式

1.搭建pclpy环境 问题&#xff1a;需要处理pcd文件&#xff0c;于是开始摸索搭建环境&#xff0c;有python-pcl&#xff0c;但是安装过程频频出现问题&#xff0c;于是转向pclpy。 参考链接&#xff1a;GitHub - davidcaron/pclpy: Python bindings for the Point Cloud Libr…...

别在用scroll去做懒加载了,交叉观察器轻松搞定

Ⅰ、前言 「懒加载」是网页中非常 常见的&#xff1b;为了减少系统的压力&#xff0c;对于一些电商系统出场频率非常高&#xff1b;那么大家一般用什么方式去实现 「懒加载」 呢 &#xff1f; ① 通过 scroll 的形式&#xff1a; 通过 滚动「scroll」事件&#xff0c;然后去判…...

工欲善其事,必先利其器,分享5款Windows效率软件

工欲善其事&#xff0c;必先利其器。作为全球最多人使用的桌面操作系统&#xff0c;Windows 的使用效率与我们的工作学习息息相关。今天&#xff0c;小编就为大家整理了5款提高效率的利器&#xff0c;让你的 Windows 更具生产力。 1.桌面自定义——Rainmeter Rainmeter是一款…...

机器学习笔记之生成模型综述(四)概率图模型 vs 神经网络

机器学习笔记之生成模型综述——概率图模型vs神经网络引言回顾&#xff1a;概率图模型与前馈神经网络贝叶斯网络 VS\text{VS}VS 神经网络表示层面观察两者区别推断、学习层面观察两者区别引言 本节将介绍概率图模型与神经网络之间的关联关系和各自特点。 回顾&#xff1a;概率…...

微信小程序 组件与页面交互 无反应的问题

使用组件 声明组件 1.在目录中右键&#xff0c;新建components 2.在页面的json&#xff0c;属性中加入"component": true, 编写组件 父 声明&#xff1a; "usingComponents": {"address": "../../components/address/address"},…...

maven相关概念以及no dependency information available错误修改

一&#xff0c;相关概念 1&#xff0c;Maven坐标 Maven定义了这样一组规则&#xff1a;世界上任何一个构件都可以使用Maven坐标唯一标识&#xff0c;Maven坐标元素包括groupId、artifactId、version、packaging、classifier&#xff0c;现在只要我们提供正确的元素坐标&#x…...

测试微信模版消息推送

进入“开发接口管理”--“公众平台测试账号”&#xff0c;无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息&#xff1a; 关注测试号&#xff1a;扫二维码关注测试号。 发送模版消息&#xff1a; import requests da…...

SciencePlots——绘制论文中的图片

文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了&#xff1a;一行…...

JVM垃圾回收机制全解析

Java虚拟机&#xff08;JVM&#xff09;中的垃圾收集器&#xff08;Garbage Collector&#xff0c;简称GC&#xff09;是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象&#xff0c;从而释放内存空间&#xff0c;避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...

【磁盘】每天掌握一个Linux命令 - iostat

目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat&#xff08;I/O Statistics&#xff09;是Linux系统下用于监视系统输入输出设备和CPU使…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序

一、开发环境准备 ​​工具安装​​&#xff1a; 下载安装DevEco Studio 4.0&#xff08;支持HarmonyOS 5&#xff09;配置HarmonyOS SDK 5.0确保Node.js版本≥14 ​​项目初始化​​&#xff1a; ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...

零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)

本期内容并不是很难&#xff0c;相信大家会学的很愉快&#xff0c;当然对于有后端基础的朋友来说&#xff0c;本期内容更加容易了解&#xff0c;当然没有基础的也别担心&#xff0c;本期内容会详细解释有关内容 本期用到的软件&#xff1a;yakit&#xff08;因为经过之前好多期…...

HashMap中的put方法执行流程(流程图)

1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中&#xff0c;其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下&#xff1a; 初始判断与哈希计算&#xff1a; 首先&#xff0c;putVal 方法会检查当前的 table&#xff08;也就…...

GraphRAG优化新思路-开源的ROGRAG框架

目前的如微软开源的GraphRAG的工作流程都较为复杂&#xff0c;难以孤立地评估各个组件的贡献&#xff0c;传统的检索方法在处理复杂推理任务时可能不够有效&#xff0c;特别是在需要理解实体间关系或多跳知识的情况下。先说结论&#xff0c;看完后感觉这个框架性能上不会比Grap…...

表单设计器拖拽对象时添加属性

背景&#xff1a;因为项目需要。自写设计器。遇到的坑在此记录 使用的拖拽组件时vuedraggable。下面放上局部示例截图。 坑1。draggable标签在拖拽时可以获取到被拖拽的对象属性定义 要使用 :clone, 而不是clone。我想应该是因为draggable标签比较特。另外在使用**:clone时要将…...

【QT控件】显示类控件

目录 一、Label 二、LCD Number 三、ProgressBar 四、Calendar Widget QT专栏&#xff1a;QT_uyeonashi的博客-CSDN博客 一、Label QLabel 可以用来显示文本和图片. 核心属性如下 代码示例: 显示不同格式的文本 1) 在界面上创建三个 QLabel 尺寸放大一些. objectName 分别…...