当前位置: 首页 > 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…...

django filter 统计数量 按属性去重

在Django中&#xff0c;如果你想要根据某个属性对查询集进行去重并统计数量&#xff0c;你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求&#xff1a; 方法1&#xff1a;使用annotate()和Count 假设你有一个模型Item&#xff0c;并且你想…...

MODBUS TCP转CANopen 技术赋能高效协同作业

在现代工业自动化领域&#xff0c;MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步&#xff0c;这两种通讯协议也正在被逐步融合&#xff0c;形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...

学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2

每日一言 今天的每一份坚持&#xff0c;都是在为未来积攒底气。 案例&#xff1a;OLED显示一个A 这边观察到一个点&#xff0c;怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 &#xff1a; 如果代码里信号切换太快&#xff08;比如 SDA 刚变&#xff0c;SCL 立刻变&#…...

安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖

在Vuzix M400 AR智能眼镜的助力下&#xff0c;卢森堡罗伯特舒曼医院&#xff08;the Robert Schuman Hospitals, HRS&#xff09;凭借在无菌制剂生产流程中引入增强现实技术&#xff08;AR&#xff09;创新项目&#xff0c;荣获了2024年6月7日由卢森堡医院药剂师协会&#xff0…...

C#学习第29天:表达式树(Expression Trees)

目录 什么是表达式树&#xff1f; 核心概念 1.表达式树的构建 2. 表达式树与Lambda表达式 3.解析和访问表达式树 4.动态条件查询 表达式树的优势 1.动态构建查询 2.LINQ 提供程序支持&#xff1a; 3.性能优化 4.元数据处理 5.代码转换和重写 适用场景 代码复杂性…...

Java 与 MySQL 性能优化:MySQL 慢 SQL 诊断与分析方法详解

文章目录 一、开启慢查询日志&#xff0c;定位耗时SQL1.1 查看慢查询日志是否开启1.2 临时开启慢查询日志1.3 永久开启慢查询日志1.4 分析慢查询日志 二、使用EXPLAIN分析SQL执行计划2.1 EXPLAIN的基本使用2.2 EXPLAIN分析案例2.3 根据EXPLAIN结果优化SQL 三、使用SHOW PROFILE…...

Linux基础开发工具——vim工具

文章目录 vim工具什么是vimvim的多模式和使用vim的基础模式vim的三种基础模式三种模式的初步了解 常用模式的详细讲解插入模式命令模式模式转化光标的移动文本的编辑 底行模式替换模式视图模式总结 使用vim的小技巧vim的配置(了解) vim工具 本文章仍然是继续讲解Linux系统下的…...

渗透实战PortSwigger Labs指南:自定义标签XSS和SVG XSS利用

阻止除自定义标签之外的所有标签 先输入一些标签测试&#xff0c;说是全部标签都被禁了 除了自定义的 自定义<my-tag onmouseoveralert(xss)> <my-tag idx onfocusalert(document.cookie) tabindex1> onfocus 当元素获得焦点时&#xff08;如通过点击或键盘导航&…...

Element-Plus:popconfirm与tooltip一起使用不生效?

你们好&#xff0c;我是金金金。 场景 我正在使用Element-plus组件库当中的el-popconfirm和el-tooltip&#xff0c;产品要求是两个需要结合一起使用&#xff0c;也就是鼠标悬浮上去有提示文字&#xff0c;并且点击之后需要出现气泡确认框 代码 <el-popconfirm title"是…...

NineData数据库DevOps功能全面支持百度智能云向量数据库 VectorDB,助力企业 AI 应用高效落地

NineData 的数据库 DevOps 解决方案已完成对百度智能云向量数据库 VectorDB 的全链路适配&#xff0c;成为国内首批提供 VectorDB 原生操作能力的服务商。此次合作聚焦 AI 开发核心场景&#xff0c;通过标准化 SQL 工作台与细粒度权限管控两大能力&#xff0c;助力企业安全高效…...