鸿蒙公共事件和通知

news2024/11/15 8:16:22

创建一个鸿蒙应用项目,在Index页面中创建一个按钮,点击该按钮,可以创建一个公共事件订阅者,可以订阅自定义公共事件(事件名称为:“ncwu.harmonytest.event1”);创建一个Toggle组件(type为Switch),点击可以订阅或取消订阅该自定义公共事件,订阅后可以接受到发布的该自定义公共事件,并在页面中用Text组件显示事件详情;然后在创建一个按钮,点击可以发布该自定义公共事件;最后,在页面中创建一个按钮,点击可以发布一个10秒倒计时定时提醒。

import commonEvent from '@ohos.commonEvent';
import prompt from '@ohos.prompt';
import data from '@ohos.telephony.data';

@Entry
@Component
struct Index {

  // 用于存储订阅状态
  @State private isSubscribed: boolean = false;
  // 订阅者
  @State private subscription: any = null;
  // 提示信息
  @State private message: string = '';

  // 创建公共事件订阅者
  createSubcriber() {

    // 订阅者信息
    var subscribeInfo = {
      events: ["ncwu.harmonytest.event1"]
    };

    // 创建订阅者
    commonEvent.createSubscriber(subscribeInfo, (err, subscriber) => {
      if (err.code) {
        prompt.showToast({ message: "创建订阅者错误" + JSON.stringify(err), duration: 3000 })
      } else {
        this.subscription = subscriber;
        this.message = "创建订阅者成功";
      }
    });
  }

  // 发布公共事件
  publishEvent() {
    //公共事件相关信息
    var options = {
      code: 1, //公共事件的初始代码
      data: "公共事件--数据", //公共事件的初始数据
    }

    commonEvent.publish("ncwu.harmonytest.event1", options, (err) => {
      if (err.code) {
        prompt.showToast({ message: "发布公共事件错误 " + JSON.stringify(err), duration: 3000 })
      } else {
        prompt.showToast({ message: "发布公共事件成功", duration: 3000 })
      }
    })
  }

  // 订阅公共事件
  subscribe() {
    if (this.subscription) {
      commonEvent.subscribe(this.subscription, (err, data) => {
        if (err.code) {
          prompt.showToast({ message: "订阅错误 " + JSON.stringify(err), duration: 3000 })
        } else {
          prompt.showToast({ message: "订阅成功 " + JSON.stringify(data), duration: 3000 })
          this.message = `接受内容:event = ${data.data},`;
          this.message += `code = ${data.code}, data = ${data.data}`
        }
      })
      this.message = "订阅成功"

    } else {
      prompt.showToast({ message: "没有订阅者,请先创建!", duration: 3000 })
    }
  }

  // 取消订阅公共事件
  unsubscribe() {
    if (this.subscription) {
      commonEvent.unsubscribe(this.subscription, (err) => {
        if (err.code) {
          prompt.showToast({ message: "取消订阅错误 " + JSON.stringify(err), duration: 3000 })
        } else {
          prompt.showToast({ message: "取消订阅成功", duration: 3000 })
          this.message = "取消订阅成功"
        }
      })
    }
  }

  // 倒计时定时提醒
  startCountdown() {
    let countdown = 10;
    const interval = setInterval(() => {
      this.message = `倒计时: ${countdown} 秒!`;
      countdown--;
      if (countdown < 0) {
        clearInterval(interval);
        console.log("倒计时结束!")
      }
    }, 1000);
  }

  build() {
    Column({ space: 15 }) {
      Button('创建公共事件订阅者')
        .fontSize(20)
        .margin({ top: 20 })
        .onClick(() => {
          this.createSubcriber();
        })

      Row() {
        Text('选择是否订阅')
          .textAlign(TextAlign.Center)
          .fontSize(20)
          .margin({ top: 30 });

        Toggle({ type: ToggleType.Switch, isOn: this.isSubscribed })
          .width(100)
          .height(50)

          .onChange((isOn: boolean) => {
            this.isSubscribed = isOn;
            if (isOn) {
              this.subscribe();
            } else {
              this.unsubscribe();
            }
          })

      }

      Button("点击发布公共事件", { type: ButtonType.Normal, stateEffect: true }).borderRadius(20)
        .backgroundColor(0x317aff)
        .fontSize(20)
        .onClick(() => {
          this.publishEvent();
        })

     Button("10S倒计时提醒", { type: ButtonType.Normal, stateEffect: true })
        .backgroundColor(0x317aff)
        .width(200)
        .height(50)
        .fontSize(20)
        .onClick(() => {
          this.startCountdown();
        })

      Text(this.message)
        .fontSize(20).padding(10)
        .lineHeight(20)
        .fontColor("red")
        .lineHeight(20)
    }
    .width('100%')
  }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2055371.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

解决 kill -9 PID 无法杀死 python 进程的问题:杀死 defunct 进程

文章目录 1. 一定要用 Ctrl C 结束程序2. 如何杀死后台僵尸 (defunct) 进程2.1 查看 defunct 进程2.2 杀死 defunct 进程的父进程 1. 一定要用 Ctrl C 结束程序 CtrlZ 和 CtrlC 都可以中断程序&#xff0c;但他们却有很大的差异&#xff0c;主要体现在&#xff1a; CtrlC: …

FSR超分笔记

最近因为工作原因&#xff0c;接触到了超分以及AMD家出的FSR算法&#xff0c;特意记录了解一下~ 前言 超分辨率是通过硬件或软件方法提高原有图像分辨率的方法&#xff0c;通过一幅或者多幅低分辨率的图像来得到一幅高分辨率的图像。 FSR是AMD提出的一种超分辨率方法&#x…

力扣面试经典算法150题:轮转数组

轮转数组 今天的题目是力扣面试经典150题中的数组的基础难度题&#xff1a;轮转数组。 题目链接&#xff1a;https://leetcode.cn/problems/rotate-array/description/?envTypestudy-plan-v2&envIdtop-interview-150 问题描述 给定一个整型数组 nums 和一个整数 k&…

微服务实战系列之玩转Docker(十一)

前言 在云原生的世界&#xff0c;经过十多年的进化&#xff0c;Docker已经形成了较完备的“后勤”保障服务和建立了荣辱与共的“密友圈”。用一句话可以概括&#xff1a;“Docker走遍天下&#xff0c;Swarm功不可没”。 因此&#xff0c;我们需尽可能做到对Swarm有充分的认识…

Java面试篇(多线程相关专题)

文章目录 0. 前言1. 线程基础1.1 线程和进程1.1.1 进程1.1.2 线程1.1.3 进程和线程的区别 1.2 并行和并发1.2.1 单核 CPU 的情况1.2.2 多核 CPU 的情况1.2.3 并行和并发的区别 1.3 线程创建的方式1.3.1 继承 Thread 类&#xff0c;重写 run 方法1.3.2 实现 Runnable 接口&#…

工业一体机在工业自动化控制领域的关键性作用

随着工业自动化技术的不断发展和应用范围的不断扩大&#xff0c;工业一体机作为一种集成了多种功能的自动化控制设备&#xff0c;在工业自动化控制领域扮演着越来越重要的角色。 一、 集成性强&#xff0c;简化系统架构 传统工业自动化控制系统通常由多个独立的设备组成&…

php7.1编译安装

1.安装必要的工具&#xff1a; 首先确保您已经安装了 Xcode 和 Command Line Tools&#xff1a;xcode-select --install2.下载 PHP 7.1 源代码&#xff1a; 访问 PHP 官方网站下载 PHP 7.1 的源代码&#xff1a; wget https://www.php.net/distributions/php-7.1.33.tar.gz t…

基于Java企业项目管理系统--论文pf

TOC springboot527基于Java企业项目管理系统--论文pf 第1章 绪论 1.1 课题背景 二十一世纪互联网的出现&#xff0c;改变了几千年以来人们的生活&#xff0c;不仅仅是生活物资的丰富&#xff0c;还有精神层次的丰富。在互联网诞生之前&#xff0c;地域位置往往是人们思想上…

指针详解(五)

目录 1. 回调函数 2. qsort使用举例 1&#xff09;排序整型数据 2&#xff09;排序结构数据 3. qsort函数的模拟实现&#xff08;冒泡&#xff09; 1. 回调函数 回调函数就是一个通过函数指针调用的函数 函数的指针&#xff08;地址&#xff09;作为参数传递给另一个函数…

【python】Python实现XGBoost算法的详细理论讲解与应用实战

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

AI文字生成漫画短视频系统工具搭建部署,AI文生漫画短视频

目录 前言&#xff1a; 一、AI文生动漫小程序具有以下特点和功能&#xff1a; 二、文生动漫目前有哪些项目&#xff1f; 三、怎么搭建文生动漫小程序&#xff1f; 前言&#xff1a; AI文生动漫小程序是一款基于人工智能技术开发的动漫创作工具。它利用先进的机器学习算法&a…

大数据处理与智慧营销系统性能优化

随着企业数字化转型的加速&#xff0c;客户经营数字化正在向智能化方向发展&#xff0c;构建全场景、全流程、全触点的数字化、智能化的客户经营智慧营销体系。智慧营销系统已运行 5 年&#xff0c;伴随着业务增长&#xff0c;系统业务流程复杂度增大&#xff0c;大表数据量已超…

FreeSWITCH Record

1概述 FreeSWITCH https://signalwire.com/freeswitch是一个开源的电话交换平台。官方给它的定义是–世界上第一个跨平台的、伸缩性极好的、免费的、多协议的电话软交换平台。由这个定义我们可以得出以下几点: FreeSWITCH是跨平台的。它能原生地运行于Windows、MaxOSX、Linux、…

计算几何,CF 993A - Two Squares

目录 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 二、解题报告 1、思路分析 2、复杂度 3、代码详解 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 A - Two Squares 二、解题报告 1、思路分析 由于数据量很小&#xff0c;可…

《Redis核心技术与实战》学习笔记5——内存快照RDB:宕机后,Redis如何实现快速恢复?

文章目录 给哪些内存数据做快照&#xff1f;快照时数据能修改吗?可以每秒做一次快照吗&#xff1f;小结 大家好&#xff0c;我是大白。 上篇文章记录了 Redis 避免数据丢失的 AOF 方法。这个方法的好处&#xff0c;是每次执行只需要记录操作命令&#xff0c;需要持久化的数据量…

11.4k star! 部署清华开源的ChatGLM3,用私有化大模型无缝替换openai

转自AI技术实战 ChatGLM3 是智谱AI和清华大学 KEG 实验室联合发布的对话预训练模型。ChatGLM3-6B 是 ChatGLM3 系列中的第三代开源模型&#xff0c;对话流畅、部署门槛低&#xff0c;测评显示其基础模型ChatGLM3-6B-Base 具有在 10B 以下的基础模型中最强的性能&#xff0c;同时…

ESP32CAM人工智能教学19

ESP32CAM人工智能教学19 Udp socket服务器 本课的工作模式,正好是第十四课工作模式的相反:第十四课中,ESP32Cam是客户端,运行在PC中的Python程序是服务器,就收到了摄像头数据后,调用openCV组件显示图像。而本课的ESP32Cam是服务器,Python是客户端,正好掉了个个,目的就…

蓝桥杯编程题讲解

给定一个正整数 N ,然后将 N 分解成 3 个正整数之和。 计算出共有多少种符合要求的分解方法。 要求&#xff1a; 分解的 3 3 3个正整数各不相同; 分解的 3 3 3个正整数中都不含数字3和7. 如&#xff1a;N为8&#xff0c;可分解为 ( 1 , 1 , 6 ) (1,1,6) (1,1,6)、 ( 1 , 2 ,…

位图与布隆过滤器 —— 海量数据处理

&#x1f308; 个人主页&#xff1a;Zfox_ &#x1f525; 系列专栏&#xff1a;C从入门到精通 目录 &#x1f680; 位图 一&#xff1a; &#x1f525; 位图概念 二&#xff1a; &#x1f525; 位图的实现思路及代码实现三&#xff1a; &#x1f525; 位图的应用四&#xff1a;…

云原生系列 - Nginx(基础篇)

前言 学习视频&#xff1a;尚硅谷Nginx教程&#xff08;亿级流量nginx架构设计&#xff09;本内容仅用于个人学习笔记&#xff0c;如有侵扰&#xff0c;联系删学习文档&#xff1a; 云原生系列 - Nginx(基础篇) 1、简介 1.1、背景介绍 Nginx(enginex)是一个高性能的HTTP和…