HarmonyOS Connect原子化服务功能开发(Wi-Fi/Combo)设备控制开发与实现(二)
规设备控制
-
在“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(); } -
在“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_OK 0 代理注册成功。 CLIENT_NEED_UPGRADE 1 代理版本需要升级。 SERVICE_NEED_UPGRADE 2 服务版本需要升级。 SERVICE_ALREADY_CONNECT 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);}... } -
在“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()); } -
在“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: 获取服务数据失败}});} } -
在“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”文件中,在onInitialize函数中初始化应用。示例代码如下: Override public void onInitialize() {AiLifeServiceHelper.initApplication(this);DeviceHandlerAbility.register(this, "&qu…...
浅析 Makefile
Makefile逻辑 Makefile就是将一系列的工作流串在一起自动执行,构成Makefile最基本的要素是目标、依赖、命令。也就是为了实现目标需要哪些依赖并执行什么样的命令。 target: dependences1 dependences2 ... command1 command2 ...其中,target表示要生…...
保护品牌线上声誉的5种方法
我们如今生活在一个搜索便捷的世界,对于一个企业和个人来说,品牌的线上声誉也尤为重要。在客户考虑与您的公司开展业务之前,他们理所当然会先使用众多软件和平台搜索相关信息,以帮助他们了解和做决定。 因此,您的品牌…...
Java多重选择结构,超详细整理,适合新手入门
目录 一、什么是多重选择结构? 二、if 语句的语法 1、什么是嵌套if语句? 2、if 语句循环基本用法: 3、案例: 二、if...else多重选择结构语法 1、什么是if-else语句? 2、if...else 循环基本用法 3、案例&#…...
SCI写作,一定要避开这些“雷点”!
SCI论文写作中,除了要符合各部分的写作要求,还有许多细节问题需要我们注意,不然可能一不小心就会“踩雷”。 今天我们就来和大家分享SCI各个部分写作时的注意事项。 下面就进入正题! 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...
分库分表索引设计:分布式环境下的 主键索引、二级索引、全局索引的最佳设计实践
文章目录主键选择索引设计全局表唯一索引总结结语主键选择 对主键来说,要保证在所有分片中都唯一,它本质上就是一个全局唯一的索引。如果用大部分同学喜欢的自增作为主键,就会发现存在很大的问题。 因为自增并不能在插入前就获得值…...
2023年全国最新保安员精选真题及答案
百分百题库提供保安员考试试题、保安职业资格考试预测题、保安员考试真题、保安职业资格证考试题库等,提供在线做题刷题,在线模拟考试,助你考试轻松过关。 一、单选题(1-480题)以下备选答案中只有一项最符合题目要求&a…...
计算机网络之http07 http2,http3
HTTP1.2 http1.2都做了哪些优化 (1)头部压缩 使用HPACK压缩头部 头部冗长,大量重复字段 (2)二进制帧 将报文头部和内容字符编码改为二进制格式 字符编码未压缩 (3)并发传输 解决h1.1 队头阻塞问题,多车道 …...
内网渗透(二十五)之Windows协议认证和密码抓取-使用Hashcat和在线工具破解NTLM Hash
系列文章第一章节之基础知识篇 内网渗透(一)之基础知识-内网渗透介绍和概述 内网渗透(二)之基础知识-工作组介绍 内网渗透(三)之基础知识-域环境的介绍和优点 内网渗透(四)之基础知识-搭建域环境 内网渗透(五)之基础知识-Active Directory活动目录介绍和使用 内网渗透(六)之基…...
TongWeb8防止System.exit代码导致的进程停止
现象:当应用中存在System.exit 、Runtime.exit代码执行时,会导致TongWeb进程停止,从而产生如下日志:2023-02-14 09:47:36 [WARN] - The web application [webtest01] is still processing a request that has yet to finish. This…...
PMP每年考几次,费用如何?
一,PMP每年考几次,怎么准备? PMP项目管理证书是美国PMI发起的在全球200多个国家进行的项目管理专业人士资格认证,它的含金量和给认证者带来的作用已经很明显。 PMP考试是项目管理专业人士资格认证考试,通过PMP考试是…...
【Kubernetes】【一】Kubernetes介绍
Kubernetes介绍 应用部署方式演变 在部署应用程序的方式上,主要经历了三个时代: 传统部署:互联网早期,会直接将应用程序部署在物理机上 优点:简单,不需要其它技术的参与 缺点:不能为应用程序定…...
C语言:结构体
往期文章 C语言:初识C语言C语言:分支语句和循环语句C语言:函数C语言:数组C语言:操作符详解C语言:指针详解 目录往期文章前言1. 结构体的声明2. 结构体变量的定义和初始化3. 结构体成员的访问3. 结构体传参…...
搭建pclpy环境与读取pandaset数据并转换为pkl格式为pcd格式
1.搭建pclpy环境 问题:需要处理pcd文件,于是开始摸索搭建环境,有python-pcl,但是安装过程频频出现问题,于是转向pclpy。 参考链接:GitHub - davidcaron/pclpy: Python bindings for the Point Cloud Libr…...
别在用scroll去做懒加载了,交叉观察器轻松搞定
Ⅰ、前言 「懒加载」是网页中非常 常见的;为了减少系统的压力,对于一些电商系统出场频率非常高;那么大家一般用什么方式去实现 「懒加载」 呢 ? ① 通过 scroll 的形式: 通过 滚动「scroll」事件,然后去判…...
工欲善其事,必先利其器,分享5款Windows效率软件
工欲善其事,必先利其器。作为全球最多人使用的桌面操作系统,Windows 的使用效率与我们的工作学习息息相关。今天,小编就为大家整理了5款提高效率的利器,让你的 Windows 更具生产力。 1.桌面自定义——Rainmeter Rainmeter是一款…...
机器学习笔记之生成模型综述(四)概率图模型 vs 神经网络
机器学习笔记之生成模型综述——概率图模型vs神经网络引言回顾:概率图模型与前馈神经网络贝叶斯网络 VS\text{VS}VS 神经网络表示层面观察两者区别推断、学习层面观察两者区别引言 本节将介绍概率图模型与神经网络之间的关联关系和各自特点。 回顾:概率…...
微信小程序 组件与页面交互 无反应的问题
使用组件 声明组件 1.在目录中右键,新建components 2.在页面的json,属性中加入"component": true, 编写组件 父 声明: "usingComponents": {"address": "../../components/address/address"},…...
maven相关概念以及no dependency information available错误修改
一,相关概念 1,Maven坐标 Maven定义了这样一组规则:世界上任何一个构件都可以使用Maven坐标唯一标识,Maven坐标元素包括groupId、artifactId、version、packaging、classifier,现在只要我们提供正确的元素坐标&#x…...
在软件开发中正确使用MySQL日期时间类型的深度解析
在日常软件开发场景中,时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志,到供应链系统的物流节点时间戳,时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库,其日期时间类型的…...
【Linux】shell脚本忽略错误继续执行
在 shell 脚本中,可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行,可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令,并忽略错误 rm somefile…...
Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误
HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误,它们的含义、原因和解决方法都有显著区别。以下是详细对比: 1. HTTP 406 (Not Acceptable) 含义: 客户端请求的内容类型与服务器支持的内容类型不匹…...
页面渲染流程与性能优化
页面渲染流程与性能优化详解(完整版) 一、现代浏览器渲染流程(详细说明) 1. 构建DOM树 浏览器接收到HTML文档后,会逐步解析并构建DOM(Document Object Model)树。具体过程如下: (…...
2021-03-15 iview一些问题
1.iview 在使用tree组件时,发现没有set类的方法,只有get,那么要改变tree值,只能遍历treeData,递归修改treeData的checked,发现无法更改,原因在于check模式下,子元素的勾选状态跟父节…...
令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍
文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结: 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析: 实际业务去理解体会统一注…...
2025盘古石杯决赛【手机取证】
前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来,实在找不到,希望有大佬教一下我。 还有就会议时间,我感觉不是图片时间,因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...
C++中string流知识详解和示例
一、概览与类体系 C 提供三种基于内存字符串的流,定义在 <sstream> 中: std::istringstream:输入流,从已有字符串中读取并解析。std::ostringstream:输出流,向内部缓冲区写入内容,最终取…...
如何在最短时间内提升打ctf(web)的水平?
刚刚刷完2遍 bugku 的 web 题,前来答题。 每个人对刷题理解是不同,有的人是看了writeup就等于刷了,有的人是收藏了writeup就等于刷了,有的人是跟着writeup做了一遍就等于刷了,还有的人是独立思考做了一遍就等于刷了。…...
在Mathematica中实现Newton-Raphson迭代的收敛时间算法(一般三次多项式)
考察一般的三次多项式,以r为参数: p[z_, r_] : z^3 (r - 1) z - r; roots[r_] : z /. Solve[p[z, r] 0, z]; 此多项式的根为: 尽管看起来这个多项式是特殊的,其实一般的三次多项式都是可以通过线性变换化为这个形式…...
