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

鸿蒙 NEXT 开发中,使用公共事件进行进程间通信

大家好,我是 V 哥,在鸿蒙 NEXT 开发中,使用公共事件进行进程间通信(IPC)是一种常见的做法。下面我将提供一个完整的业务代码示例,并解释逻辑关系,以便即使是初学者也能按照步骤进行实操,废话不多说,直接上干货。

业务场景

假设我们有两个应用,应用A和应用B。应用A需要在电量低时通知应用B执行一些操作,比如降低功耗或提醒用户充电。

步骤1:导入必要的模块

首先,我们需要导入鸿蒙提供的公共事件管理模块和其他必要的模块。

import { BusinessError, commonEventManager } from '@ohos.BasicServicesKit';
import { hilog } from '@ohos.PerformanceAnalysisKit';

步骤2:定义标签和域编号

为了在日志中标识我们的应用,我们需要定义一个标签和一个域编号。

const TAG: string = 'PowerSavingApp';
const DOMAIN_NUMBER: number = 0xFF00;

步骤3:创建订阅者信息

在应用B中,我们需要创建一个订阅者来监听应用A发布的电量低事件。

let subscriber: commonEventManager.CommonEventSubscriber | null = null;
let subscribeInfo: commonEventManager.CommonEventSubscribeInfo = {events: ['device.battery.low'], // 订阅电量低事件
};

步骤4:创建订阅者对象

使用commonEventManager.createSubscriber方法创建订阅者对象。

commonEventManager.createSubscriber(subscribeInfo, (err: BusinessError, data: commonEventManager.CommonEventSubscriber) => {if (err) {hilog.error(DOMAIN_NUMBER, TAG, `Failed to create subscriber. Code is ${err.code}, message is ${err.message}`);return;}hilog.info(DOMAIN_NUMBER, TAG, 'Succeeded in creating subscriber.');subscriber = data;
});

步骤5:订阅公共事件

使用commonEventManager.subscribe方法订阅事件。

if (subscriber !== null) {commonEventManager.subscribe(subscriber, (err: BusinessError, data: commonEventManager.CommonEventData) => {if (err) {hilog.error(DOMAIN_NUMBER, TAG, `Failed to subscribe common event. Code is ${err.code}, message is ${err.message}`);return;}handleLowBatteryEvent(data);});
} else {hilog.error(DOMAIN_NUMBER, TAG, `Need to create subscriber`);
}

步骤6:处理电量低事件

定义一个函数来处理电量低事件。

function handleLowBatteryEvent(data: commonEventManager.CommonEventData) {hilog.info(DOMAIN_NUMBER, TAG, `Received low battery event. Taking power saving measures.`);// 这里可以添加降低功耗的具体操作,例如关闭后台任务、降低屏幕亮度等
}

步骤7:发布公共事件

在应用A中,当检测到电量低时,发布一个电量低事件。

let options: commonEventManager.CommonEventPublishData = {code: 1,data: 'Manual power saving triggered',
};
commonEventManager.publish('device.battery.low', options, (err: BusinessError) => {if (err) {hilog.error(DOMAIN_NUMBER, TAG, 'PublishCallBack err = ' + JSON.stringify(err));} else {hilog.info(DOMAIN_NUMBER, TAG, 'Publish success');}
});

逻辑关系解释

  1. 创建订阅者:应用B创建一个订阅者,用于监听特定的事件(如电量低)。
  2. 订阅事件:应用B通过subscribe方法订阅特定的事件。
  3. 处理事件:当应用A发布电量低事件时,应用B的handleLowBatteryEvent函数会被触发,执行相应的功耗降低操作。
  4. 发布事件:应用A在检测到电量低时发布事件,通知应用B。

通过以上步骤,我们可以实现应用间的进程间通信。这个示例展示了如何使用鸿蒙的公共事件服务来实现跨应用的动态交互。希望这个示例能帮助你理解并实现自己的跨应用通信需求。

相关文章:

鸿蒙 NEXT 开发中,使用公共事件进行进程间通信

大家好,我是 V 哥,在鸿蒙 NEXT 开发中,使用公共事件进行进程间通信(IPC)是一种常见的做法。下面我将提供一个完整的业务代码示例,并解释逻辑关系,以便即使是初学者也能按照步骤进行实操&#xf…...

算法-excel表头位置转成对应数字 26进制转10进制

给你一个字符串 columnTitle ,表示 Excel 表格中的列名称。返回 该列名称对应的列序号 。 例如: A -> 1 B -> 2 C -> 3 ... Z -> 26 AA -> 27 AB -> 28 ... 示例 1: 输入: columnTitle "A" 输出: 1示例 2: 输入: colu…...

清华发布Hyper-YOLO:超图计算+目标检测!捕捉高阶视觉关联

目录 论文信息 引言 背景 算法概括 超图计算 Hyper-YOLO整体架构 基于超图的跨层次和跨位置表示网络 Coovally AI模型训练与应用平台 实验结论 总结 论文信息 题目:Hyper-YOLO: When Visual Object Detection Meets Hypergraph Computation Hyper-YOLO&a…...

如何使用网络工具进行网络性能评估

网络评估是对IT基础设施的系统评估,以确保它能够很好地满足企业的核心运营需求,确定了基础设施中需要改进的领域,并定义了改进的范围。 网络评估工具分析IT基础设施的各个方面,它通过评估网络设备、网络性能和安全威胁来仔细检查…...

MyBatis执行一条sql语句的流程(源码解析)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 MyBatis执行一条sql语句的流程(源码解析) MyBatis执行sql语句的流程加载配置文件加载配置文件的流程 创建sqlsessionFactory对象解析Mapper创建sqlses…...

使用three.js 实现vr全景图展示,复制即可用

1.实现效果 2.代码 1.npm安装three.js npm install three 2.引入three.js import * as THREE from three import { OrbitControls } from three/examples/jsm/controls/OrbitControls 3.初始化模型 init(val) {this.container document.querySelector(.container)// 初始…...

MATLAB关于集合的运算(部分)

集合运算比较两个集合中的元素,以找出共性或差异 i n t e r s e c t intersect intersect表示两组数据的交集 i s m e m b e r ismember ismember表示查找数据的集合成员 u n i o n union union表示两个数据集的并集 u n i q u e unique unique表示查找数据集的…...

谈谈数据产品开发流程

数据产品开发流程涵盖以下关键步骤:首先是需求调研与规划,通过与业务部门等沟通,明确产品定位、受众及功能,制定项目计划。接着进行数据采集与处理,确定数据源,运用合适工具采集并清洗、转换数据后存储。然…...

Unity3D仿星露谷物语开发12之创建道具列表

1、目标 道具是游戏的核心部分,道具包括你可以拾取的东西,你可以使用的工具和你能种的东西等。 本节就是创建道具的信息类。同时了解ScriptableObject类的使用。 2、创建道具枚举类 修改Assets -> Scripts -> Enums.cs脚本, 新增如…...

Linux(Centos 7.6)常见基础配置

1.网络配置 网络配置详见:VMware安装Linux(Centos 7.6)后网络配置 2.yum源配置 yum源配置详见:Linux(Centos 7.6)yum源配置 3.主机名配置 1.Linux(Centos 7.6)系统安装后,没有配置主机名时,root用户登录后,是如下…...

2024年底关于期货的工作总结

十几年程序猿出身,因几年前的懵懂无畏闯入期货市场,盈了,感觉期货太简单,飘然裸辞,想当财务自由者,全职做交易。当深入学习时,却亏了,原来市场是让人敬畏的,也是反人性的…...

python 插入排序(Insertion Sort)

插入排序(Insertion Sort) 插入排序是一种简单的排序算法。它的基本思想是:将数组分为已排序部分和未排序部分,然后逐个将未排序部分的元素插入到已排序部分的正确位置。插入排序类似于整理扑克牌的过程。 插入排序的步骤&#…...

数据库自增 id 过大导致前端时数据丢失

可以看到,前端响应参数是没有丢失精度的 但是在接受 axios 请求参数时出现了精度丢失 解决方案一:改变 axios 字符编码 axios.defaults.headers[Content-Type] application/json;charsetUTF-8; 未解决 解决方案二:手动使用 json.parse() …...

优化租赁小程序提升服务效率与用户体验的策略与实践

内容概要 在这个快速发展的商业环境中,租赁小程序成为了提升服务效率和用户体验的重要工具。通过对用户需求的深入挖掘,我们发现他们对于功能的便捷性、响应速度和界面的友好性有着极高的期待。因此,针对这些需求,完善租赁小程序…...

nvm node.js 版本管理工具

nvm 介绍 nvm 全称 Node Version Manager 顾名思义它是用来管理 node 版本的工具,方便切换不同版本的Node.js 使用 nvm 的使用非常的简单,跟 npm 的使用方法类似 下载安装 首先先下载 nvm,下载地址 https://github.com/coreybutler/nvm…...

使用Locust对Redis进行负载测试

1.安装环境 安装redis brew install redis 开启redis服务 brew services start redis 停止redis服务 brew services stop redis 安装Python库 pip install locust redis 2.编写脚本 loadTest.py # codingutf-8 import json import random import time import redis …...

计算机网络与通信复习

因特网的核心部分(电路交换与分组交换的不同点,分组交换的优点) 核心部分:路由器、交换机 我们假如数据就是一个货物,比如说一千公斤的大米,电路交换要有专用通道,不管从起点到终点经过多少个…...

WAV文件双轨PCM格式详细说明及C语言解析示例

WAV文件双轨PCM格式详细说明及C语言解析示例 一、WAV文件双轨PCM格式详细说明1. WAV文件基本结构2. PCM编码方式3. 双轨PCM格式详细说明二、C语言解析WAV文件的代码示例代码说明一、WAV文件双轨PCM格式详细说明 WAV文件是一种用于存储未压缩音频数据的文件格式,广泛应用于音频…...

【华为OD-E卷 - 网上商城优惠活动 100分(python、java、c++、js、c)】

【华为OD-E卷 - 网上商城优惠活动 100分(python、java、c、js、c)】 题目 某网上商场举办优惠活动,发布了满减、打折、无门槛3种优惠券,分别为: 每满100元优惠10元,无使用数限制,如100 ~ 199元…...

c# Record关键字

在 C# 9.0 中引入了 record 关键字,用于定义记录类型(Record Types)。记录类型是一种轻量级的数据载体,专注于表示数据,它提供了内置的相等性比较、生成属性和方法等功能,使得编写数据类更加简洁和高效。 …...

Windows 10 自带功能实现大屏、小屏无线扩展

一、添加可选功能 在作为无线投屏对象的「第二屏」设备上,打开 Windows 10 设置并定位至「应用 > 应用和功能」界面,然后点击右侧界面中的「可选功能」选项。 点击可选功能界面顶部的「添加功能」按钮,搜索「无线显示器」模块并选择添加。…...

Python内存管理揭秘:有效避免内存泄漏,提升程序稳定性

《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 在现代软件开发中,内存管理是确保程序高效、稳定运行的关键因素之一。尽管Python凭借其自动垃圾回收机制简化了内存管理,但内存泄漏问题仍…...

论文分享 | PromptFuzz:用于模糊测试驱动程序生成的提示模糊测试

大语言模型拥有的强大能力可以用来辅助多种工作,但如何有效的辅助仍然需要人的精巧设计。分享一篇发表于2024年CCS会议的论文PromptFuzz,它利用模型提示生成模糊测试驱动代码,并将代码片段嵌入到LLVM框架中执行模糊测试。 论文摘要 制作高质…...

网工日记:FTP两种工作模式的区别

FTP 的主动模式和被动模式在连接建立的发起方、数据传输端口以及对网络环境的适应性等方面存在明显区别: 1. 连接发起方 主动模式:数据连接由服务器主动发起。在控制连接建立后,客户端通过 PORT 命令告知服务器自己用于接收数据的临时端口号…...

clickhouse-backup配置及使用(Linux)

一、下载地址 Releases Altinity/clickhouse-backup GitHub 二、上传到服务器解压安装 自行上传至服务器,解压命令: tar xvf clickhouse-backup-linux-amd64.tar.gz 三、创建软连接 sudo ln -sv build/linux/amd64/clickhouse-backup /usr/local/bin/…...

【每日学点鸿蒙知识】模拟器开启网络、长时任务、兼容性测试支持、丢帧定位、SO中访问rawfile等

1、模拟器如何开启网络? 模拟器使用的是电脑本身的网络,不通过代理即可访问网络。 2、创建子window后,锁屏很短时间内,应用会被杀死? 没开长时任务,锁屏和退后台保活要开长时任务。 应用退至后台后&…...

Python 将文字和二维码 生成到BMP上 可以做标签打印等

直接上代码吧,都有注释,看得明白 将代码复制到main.py文件中,就可以调试了 from PIL import Image, ImageDraw, ImageFont import matplotlib.font_manager as fm from matplotlib.font_manager import FontProperties import os import qr…...

pat 乙级1096 大美数

若正整数 N 可以整除它的 4 个不同正因数之和,则称这样的正整数为“大美数”。本题就要求你判断任一给定的正整数是否是“大美数”。 输入格式: 输入在第一行中给出正整数 K(≤10),随后一行给出 K 个待检测的、不超过…...

INT303 Big Data Analytics 笔记

Lecture1 Introduction 不考! “Data Mining is the study of collecting, processing, analyzing, and gaining useful insights from data” EXPLORATORY ANALYSIS Make measurements to understand what the data looks like first steps when collecting da…...

Git 解决 everything up-to-date

首先使用git log查看历史提交,找到最新一次提交,比如: PS D:\Unity Projects\CoffeeHouse\CoffeeHouse_BurstDebugInformation_DoNotShip> git log commit a1b54c309ade7c07c3981d3ed748b0ffac2759a3 (HEAD -> master, origin/master)…...

初级算法 - 数组简介

数组简介 在TypeScript中,数组是一种存储同一类型数据的集合类型。数组可以动态调整长度,支持对元素进行增删改查等操作。通过类型注解,可以更清晰地约束数组中元素的类型,提升代码的可维护性。 创建数组的方式 1. 使用字面量方式…...

【毕业设计选题】目标检测方向毕业设计选题推荐 2025

目录 前言 毕设选题 开题指导建议 更多精选选题 选题帮助 最后 前言 大家好,这里是海浪学长毕设专题! 大四是整个大学期间最忙碌的时光,一边要忙着准备考研、考公、考教资或者实习为毕业后面临的升学就业做准备,一边要为毕业设计耗费大量精力。学长给大家整…...

适配器模式详解

适配器模式(Adapter Pattern)是一种结构型设计模式,它允许将一个类的接口转换成客户所期望的另一个接口,使得原本不兼容的类能够协同工作。这种模式的主要目的是解决接口不匹配的问题,它通过创建一个适配器类&#xff…...

基于 Spring 的自定义注解和请求拦截器实现认证机制

基于 Spring 的自定义注解和请求拦截器实现认证机制 一、基于 Spring 的自定义注解和请求拦截器实现认证机制1. 背景2. 业务场景3. 核心实现3.1 定义自定义注解 IgnoreAuth3.2 定义请求拦截器 AuthInterceptor3.3 配置拦截器3.4 登录接口 4. 小结 一、基于 Spring 的自定义注解…...

Java编程规约:集合处理

文章目录 I 集合处理【强制】【推荐】II 知识扩展I 集合处理 【强制】 不要在 foreach 循环里进行元素的 remove / add 操作。remove 元素请使用 iterator 方式,如果并发操作,需要对 iterator 对象加锁。// 正例: List<String> list = new ArrayList<>(...

python使用PyQt5,整套,桌面应用

安装 安装 pip install PyQt55.7.1 pip install PyQtWebEngine1、创建窗口&#xff0c;按百分比划分 from PyQt5.QtGui import QGuiApplication from PyQt5.QtWidgets import QApplication, QWidget # 创建应用程序实例 app QApplication([]) # 创建主窗口 window QWidget(…...

机械臂的各种标定

文章目录 1. 工具坐标系标定2. 工具手标定3. 手眼标定联系 在工程中&#xff0c;同时使用工具坐标系标定、工具手标定和手眼标定的概念、目的和作用如下&#xff1a; 1. 工具坐标系标定 概念&#xff1a; 工具坐标系标定是指确定工具相对于机器人坐标系的位置和姿态关系的过程…...

金融租赁系统助力企业转型与市场竞争力提升

内容概要 在现代商业环境中&#xff0c;金融租赁系统不仅是一个简单的工具&#xff0c;而是企业转型的重要推动力。通过优化业务流程&#xff0c;提升自动化水平&#xff0c;它帮助企业在复杂的市场中找到自己的立足之地。想象一下&#xff0c;一个企业在使用传统方法时&#…...

正则表达式 - 运算符优先级

正则表达式 - 运算符优先级 正则表达式(Regular Expression,简称Regex)是一种用于处理字符串的强大工具,它通过特定的语法规则来匹配、查找和替换文本中的特定模式。在正则表达式中,运算符的优先级决定了表达式各部分的处理顺序,这对于正确理解和编写正则表达式至关重要…...

【python】unittest单元测试

文章目录 基本使用不同启动方式的区别 基本使用 下面是根据文档写的一个demo&#xff0c;主要的内容基本都包含了&#xff0c;使用时导入自己的业务类测试类中的方法就行。 import unittest# 测试类不强制test开头&#xff0c;仅作为规范。但必须继承unittest.TestCase class…...

【YashanDB知识库】如何使用jdbc向YashanDB批量插入gis数据

本文内容来自YashanDB官网&#xff0c;原文内容请见 https://www.yashandb.com/newsinfo/7817897.html?templateId1718516 以gis表为例&#xff1a; drop table gis; create table gis(id number not null, pos st_geometry not null); 使用如下的java代码片断&#xff0c…...

基于 LangChain 实现数据库问答机器人

基于 LangChain 实现数据库问答机器人 一、简介二、应用场景三、实战案例1、需求说明2、实现思路3、对应源码 一、简介 在 Retrieval 或者 ReACT 的一些场景中&#xff0c;常常需要数据库与人工智能结合。而 LangChain 本身就封装了许多相关的内容&#xff0c;在其官方文档-SQ…...

XIAO ESP32 S3网络摄像头——2视频获取

本文主要是使用XIAO Esp32 S3制作网络摄像头的第2步,获取摄像头图像。 1、效果如下: 2、所需硬件 3、代码实现 3.1硬件代码: #include "WiFi.h" #include "WiFiClient.h" #include "esp_camera.h" #include "camera_pins.h"// 设…...

图像描述/字幕开源模型与数据集全览

图像描述/字幕&#xff08;Image Captioning&#xff09;是用文字描述图像内容的任务&#xff0c;属于计算机视觉和自然语言处理的交叉领域。大多数图像描述系统采用编码器-解码器&#xff08;encoder-decoder&#xff09;框架&#xff0c;其中输入图像被编码为中间表示形式&am…...

关于UE加载osgb数据的研究(一)

最近关于倾斜数据在UE中加载显示的问题,直接转换格式本地加载的方式避免了数据延迟加载、缓存加载,动态刷新等问题,但是也暴露了突出的问题:常规的模型格式会丢失掉倾斜数据的lod,致使效果缺失。 故而需要深入研究一下UE加载osgb数据的方式方法。 首先,我们需得学习一下…...

Hypervisor 的两种类型

文章目录 一、定义 Hypervisor&#xff08;也被称为虚拟机监视器&#xff0c;即Virtual Machine Monitor&#xff0c;VMM&#xff09;是一种创建和运行虚拟机的软件、固件或硬件。它可以在物理主机上划分出多个虚拟的计算环境&#xff0c;使得多个操作系统&#xff08;Guest Op…...

07-ArcGIS For JavaScript--隐藏参数qualitySettings(memory和lod控制)

目录 1、综述2、sceneview.qualitySettings2.1、sceneview.qualitySettings.memoryLimit2.2、lodFactor2.3 additionalCacheMemory 3、结论 1、综述 先上重点&#xff0c;SceneView.qualitySettings为隐藏对象参数&#xff0c;该对象的memoryLimit和lodFactor等值&#xff0c;…...

内训宝企业培训平台 upload/scorm 文件上传致RCE漏洞复现

0x01 产品简介 内训宝企业培训平台是一款专注于企业内部培训的在线平台,由北京内训宝科技有限公司开发并提供服务。旨在为企业提供全方位、个性化的内部培训解决方案。通过该平台,企业可以轻松地组织和管理内部培训活动,提升员工的专业技能和综合素质,进而增强企业的竞争力…...

js按日期按数量进行倒序排序,然后再新增一个字段,给这个字段赋值 10 到1

效果如下图&#xff1a; 实现思路&#xff1a; 汇总数据&#xff1a;使用 reduce 方法遍历原始数据数组&#xff0c;将相同日期的数据进行合并&#xff0c;并计算每个日期的总和。创建日期映射&#xff1a;创建一个映射 dateMap&#xff0c;存储每个日期的对象列表。排序并添加…...

[2025] 如何在 Windows 计算机上轻松越狱 IOS 设备

笔记 1. 首次启动越狱工具时&#xff0c;会提示您安装驱动程序。单击“是”确认安装&#xff0c;然后再次运行越狱工具。 2. 对于Apple 6s-7P和iPad系列&#xff08;iOS14.4及以上&#xff09;&#xff0c;您应该点击“Optinos”并勾选“允许未经测试的iOS/iPadOS/tvOS版本”&…...