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…...
Ascend NPU上适配Step-Audio模型
1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统,支持多语言对话(如 中文,英文,日语),语音情感(如 开心,悲伤)&#x…...
华硕a豆14 Air香氛版,美学与科技的馨香融合
在快节奏的现代生活中,我们渴望一个能激发创想、愉悦感官的工作与生活伙伴,它不仅是冰冷的科技工具,更能触动我们内心深处的细腻情感。正是在这样的期许下,华硕a豆14 Air香氛版翩然而至,它以一种前所未有的方式&#x…...
C/C++ 中附加包含目录、附加库目录与附加依赖项详解
在 C/C 编程的编译和链接过程中,附加包含目录、附加库目录和附加依赖项是三个至关重要的设置,它们相互配合,确保程序能够正确引用外部资源并顺利构建。虽然在学习过程中,这些概念容易让人混淆,但深入理解它们的作用和联…...
在Mathematica中实现Newton-Raphson迭代的收敛时间算法(一般三次多项式)
考察一般的三次多项式,以r为参数: p[z_, r_] : z^3 (r - 1) z - r; roots[r_] : z /. Solve[p[z, r] 0, z]; 此多项式的根为: 尽管看起来这个多项式是特殊的,其实一般的三次多项式都是可以通过线性变换化为这个形式…...
Python Einops库:深度学习中的张量操作革命
Einops(爱因斯坦操作库)就像给张量操作戴上了一副"语义眼镜"——让你用人类能理解的方式告诉计算机如何操作多维数组。这个基于爱因斯坦求和约定的库,用类似自然语言的表达式替代了晦涩的API调用,彻底改变了深度学习工程…...
解决:Android studio 编译后报错\app\src\main\cpp\CMakeLists.txt‘ to exist
现象: android studio报错: [CXX1409] D:\GitLab\xxxxx\app.cxx\Debug\3f3w4y1i\arm64-v8a\android_gradle_build.json : expected buildFiles file ‘D:\GitLab\xxxxx\app\src\main\cpp\CMakeLists.txt’ to exist 解决: 不要动CMakeLists.…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现指南针功能
指南针功能是许多位置服务应用的基础功能之一。下面我将详细介绍如何在HarmonyOS 5中使用DevEco Studio实现指南针功能。 1. 开发环境准备 确保已安装DevEco Studio 3.1或更高版本确保项目使用的是HarmonyOS 5.0 SDK在项目的module.json5中配置必要的权限 2. 权限配置 在mo…...
解析两阶段提交与三阶段提交的核心差异及MySQL实现方案
引言 在分布式系统的事务处理中,如何保障跨节点数据操作的一致性始终是核心挑战。经典的两阶段提交协议(2PC)通过准备阶段与提交阶段的协调机制,以同步决策模式确保事务原子性。其改进版本三阶段提交协议(3PC…...
Linux操作系统共享Windows操作系统的文件
目录 一、共享文件 二、挂载 一、共享文件 点击虚拟机选项-设置 点击选项,设置文件夹共享为总是启用,点击添加,可添加需要共享的文件夹 查询是否共享成功 ls /mnt/hgfs 如果显示Download(这是我共享的文件夹)&…...
组合模式:构建树形结构的艺术
引言:处理复杂对象结构的挑战 在软件开发中,我们常遇到需要处理部分-整体层次结构的场景: 文件系统中的文件与文件夹GUI中的容器与组件组织结构中的部门与员工菜单系统中的子菜单与菜单项组合模式正是为解决这类问题而生的设计模式。它允许我们将对象组合成树形结构来表示&…...
