鸿蒙系统开发【事件订阅】网络

news2025/1/15 16:32:05

事件订阅

介绍

本示例通过@ohos.telephony.observer等接口订阅网络状态、信号状态、蜂窝数据、sim状态等事件,并获取状态变化返回的结果。

效果预览

1

使用说明

1.打开应用,开启所有订阅事件开关。

2.开关一次移动网络,触发网络状态变化。

3.插拔一次sim卡,触发sim卡状态变化和信号状态变化。

4.点击查看详情按钮,跳转详情页,显示监听到的数据结果。

具体实现

  • 该示例使用NetworkState方法获取网络注册状态,SignalInformation方法获取网络信号强度信息,RadioTechnology方法获取无线接入技术,DataConnectState方法描述蜂窝数据链路连接状态,DataFlowType方法描述蜂窝数据流类型,SimStateData方法获取SIM卡类型和状态等方法提供订阅管理功能。
  • 源码参考:[DetailData.ts]
/*
 * Copyright (c) 2022 Huawei Device Co., Ltd.
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
import { radio,call,data,observer } from '@kit.TelephonyKit'

export default class DetailData {
  //网络注册状态
  public networkState: radio.NetworkState
  //网络信号强度信息
  public signalInformation: Array<radio.SignalInformation>
  //通话状态
  public callState?: call.CallState
  //电话号码
  public callNumber?: string
  //蜂窝数据链路连接状态
  public dataConnectState?: data.DataConnectState
  //无线接入技术
  public ratType?: radio.RadioTechnology
  //蜂窝数据流类型
  public dataFlowType: data.DataFlowType
  //SIM卡类型和状态
  public simStateData: observer.SimStateData

  constructor() {
    this.networkState = undefined
    this.signalInformation = undefined
    this.callState = undefined
    this.callNumber = undefined
    this.dataConnectState = undefined
    this.ratType = undefined
    this.dataFlowType = undefined
    this.simStateData = undefined
  }
}

  • 源码参考[Index.ets]
/*
 * Copyright (c) 2022-2023 Huawei Device Co., Ltd.
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

import Logger from '../modle/Logger'
import { router } from '@kit.ArkUI'
import DetailData from '../modle/DetailData'
import { data,radio,observer } from '@kit.TelephonyKit'

const TAG: string = 'Index'
let detailData: DetailData = new DetailData()

class Value {
  state: data.DataConnectState = data.DataConnectState.DATA_STATE_UNKNOWN
  network: radio.RadioTechnology = radio.RadioTechnology.RADIO_TECHNOLOGY_UNKNOWN
}

@Entry
@Component
struct Index {
  @State subscribes: Array<Resource> = [
    $r('app.string.network_state_change'),
    $r('app.string.signal_info_change'),
    $r('app.string.cellular_data_connection_state_change'),
    $r('app.string.cellular_data_flow_change'),
    $r('app.string.sim_state_change')
  ]
  networkStateChangeCallback = (data: observer.NetworkState) => {
    Logger.info(TAG, `on networkStateChange, data: ${JSON.stringify(data)}`)
    detailData.networkState = data as observer.NetworkState
  }
  signalInfoChangeCallback = (data: Array<radio.SignalInformation>) => {
    Logger.info(TAG, `on signalInfoChange, data: ${JSON.stringify(data)}`)
    detailData.signalInformation = data
  }
  cellularDataConnectionStateChangeCallback = (data: Value) => {
    Logger.info(TAG, `on cellularDataConnectionStateChange, data: ${JSON.stringify(data)}`)
    detailData.dataConnectState = data.state
    detailData.ratType = data.network
  }
  cellularDataFlowChangeCallback = (data: data.DataFlowType) => {
    Logger.info(TAG, `on cellularDataFlowChange, data: ${JSON.stringify(data)}`)
    detailData.dataFlowType = data
  }
  simStateChangeCallback = (data: observer.SimStateData) => {
    Logger.info(TAG, `on simStateChange, data: ${JSON.stringify(data)}`)
    detailData.simStateData = data
  }

  onChangeCallback(index: number, isOn: boolean) {
    switch (index) {
      case 0:
          isOn ? observer.on('networkStateChange', this.networkStateChangeCallback) :
        observer.off('networkStateChange', this.networkStateChangeCallback)
        break
      case 1:
          isOn ? observer.on('signalInfoChange', this.signalInfoChangeCallback) :
        observer.off('signalInfoChange', this.signalInfoChangeCallback)
        break
      case 2:
          isOn ? observer.on('cellularDataConnectionStateChange', this.cellularDataConnectionStateChangeCallback) :
        observer.off('cellularDataConnectionStateChange', this.cellularDataConnectionStateChangeCallback)
        break
      case 3:
          isOn ? observer.on('cellularDataFlowChange', this.cellularDataFlowChangeCallback) :
        observer.off('cellularDataFlowChange', this.cellularDataFlowChangeCallback)
        break
      case 4:
          isOn ? observer.on('simStateChange', this.simStateChangeCallback) :
        observer.off('simStateChange', this.simStateChangeCallback)
        break
      default:
        break
    }
  }

  build() {
    Column() {
      Row() {
        Text('observer')
          .fontSize(30)
          .fontColor(Color.White)
      }
      .width('100%')
      .height('8%')
      .padding({ left: 16 })
      .backgroundColor('#0D9FFB')

      List({ space: 20, initialIndex: 0 }) {
        ForEach(this.subscribes, (item: Resource, index) => {
          ListItem() {
            Row() {
              Text(item)
                .fontSize(20)
              Blank()
              Toggle({ type: ToggleType.Switch, isOn: false })
                .size({ width: 28, height: 16 })
                .selectedColor('#0D9FFB')
                .onChange((isOn: boolean) => {
                  this.onChangeCallback(index, isOn)
                })
                .id('switch' + (index + 1))
            }
            .width('100%')
            .margin({bottom: 12 })
          }
          .width('100%')
        })
      }
      .width('100%')
      .height('70%')
      .padding({ left: 10, right: 10 })

      Button($r('app.string.details'))
        .id('seeDetails')
        .width('40%')
        .onClick(() => {
          Logger.info(TAG, `detailData is = ${JSON.stringify(detailData)}`)
          router.pushUrl({
            url: 'pages/Detail',
            params: {
              detailData: detailData
            }
          })
        })
    }
    .width('100%')
    .height('100%')
  }
}
  • 接口参考:@ohos.telephony.radio,@ohos.telephony.data,@ohos.telephony.observer

以上就是本篇文章所带来的鸿蒙开发中一小部分技术讲解;想要学习完整的鸿蒙全栈技术。可以在结尾找我可全部拿到!
下面是鸿蒙的完整学习路线,展示如下:
1

除此之外,根据这个学习鸿蒙全栈学习路线,也附带一整套完整的学习【文档+视频】,内容包含如下

内容包含了:(ArkTS、ArkUI、Stage模型、多端部署、分布式应用开发、音频、视频、WebGL、OpenHarmony多媒体技术、Napi组件、OpenHarmony内核、鸿蒙南向开发、鸿蒙项目实战)等技术知识点。帮助大家在学习鸿蒙路上快速成长!

鸿蒙【北向应用开发+南向系统层开发】文档

鸿蒙【基础+实战项目】视频

鸿蒙面经

在这里插入图片描述

为了避免大家在学习过程中产生更多的时间成本,对比我把以上内容全部放在了↓↓↓想要的可以自拿喔!谢谢大家观看!

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

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

相关文章

Linux-4:Shell编程——基础语法(50%-100%)

目录 前言 一、数组 1.数组定义 2.关联数组 3.数组长度 二、运算符 1.算术运算符 2.关系运算符 3.布尔运算符 4.逻辑运算符 5.字符串运算符 6.文件测试运算符 三、read命令 1.接收用户输入 2.开启转义 3. -p 输入提示 4. -s 静默模式 -t 设置超时时间 5.读取…

Spark Steaming有状态转换实验

创建一个streaming目录 mkdir streaming 一、运行网络版的WordCount 1. 连接虚拟机后利用sudo打开hosts后加入红色方框内语句并保存&#xff1a; sudo vim /etc/hosts Netcat是一个用于TCP/UDP连接和监听的Linux工具, 主要用于网络传输及调试领域。先下载&#xff1a; sudo…

简明中医辨证施治小程序

这是一款学习中医辨证施治的好工具&#xff0c;将中医内科、妇科、儿科常见疾病的辨证施治进行整理&#xff0c;各种疾病的辨证分型、症状、治法、方剂选用等均编辑成简明的条目&#xff0c;一目了然&#xff0c;另外内含方剂学及中药学&#xff0c;内容包括常用方剂的出处、组…

GO goroutine状态流转

Gidle -> Grunnable newproc获取新的goroutine&#xff0c;并放置到P运行队列中 这也是go关键字之后实际编译调用的方法 func newproc(fn *funcval) {// 获取当前正在运行中的goroutinegp : getg()// 获取调用者的程序计数器地址&#xff0c;用于调试和跟踪pc : getcallerp…

量化小白也能自动化挖掘出6万+因子

最近逛某乎&#xff0c;碰到了这个问题&#xff1a;如何看待量化交易WorldQuant世坤大赛北大牛人提交了6万因子&#xff1f; 我的第一直觉&#xff0c;这肯定不是纯手工挖出来的&#xff0c;6w个因子&#xff0c;一天挖一个&#xff0c;节假日都不休息的话&#xff0c;需要164年…

轻松入门Linux—CentOS,直接拿捏 —/— <6>vim集合

一、Vim操作详解 1、linux彩蛋 输入命令python会启动Python解释器&#xff0c;允许你输入和执行Python代码。然后&#xff0c;输入import this会导入this模块&#xff0c;它是Python的一种彩蛋&#xff08;Easter egg&#xff09;&#xff0c;然后得到下列结果 选中这段结果复…

Nacos安装教程(全网最靠谱,最简单~)

Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集&#xff0c;帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。 本文将详细介绍 Nacos 的安装及使用。 官方网址&#xff1a;Nacos官网| Nacos 配置中心 | Nacos 下载| Nacos 官方…

3.7.物体检测算法

物体检测算法 1.R-CNN ​ 首先使用启发式搜索算法来选择锚框&#xff0c;使用预训练模型对每个锚框抽取特征&#xff0c;训练一个SVM来对类别分类&#xff0c;最后训练一个线性回归模型来预测边缘框偏移。 ​ R-CNN比较早&#xff0c;所以使用的是SVM 1.1 兴趣区域(RoI)池化…

【Qwen2微调实战】LLaMA-Factory框架对Qwen2-7B模型的微调实践

系列篇章&#x1f4a5; No.文章1【Qwen部署实战】探索Qwen-7B-Chat&#xff1a;阿里云大型语言模型的对话实践2【Qwen2部署实战】Qwen2初体验&#xff1a;用Transformers打造智能聊天机器人3【Qwen2部署实战】探索Qwen2-7B&#xff1a;通过FastApi框架实现API的部署与调用4【Q…

【数据结构进阶】手撕红黑树

&#x1f525;个人主页&#xff1a; Forcible Bug Maker &#x1f525;专栏&#xff1a; C || 数据结构 目录 &#x1f308;前言&#x1f525;红黑树的概念&#x1f525;手撕红黑树红黑树结点的定义红黑树主体需要实现的成员函数红黑树的插入findEmpty和Size拷贝构造析构函数和…

CANFD报文 位时间 理解

&#x1f345; 我是蚂蚁小兵&#xff0c;专注于车载诊断领域&#xff0c;尤其擅长于对CANoe工具的使用&#x1f345; 寻找组织 &#xff0c;答疑解惑&#xff0c;摸鱼聊天&#xff0c;博客源码&#xff0c;点击加入&#x1f449;【相亲相爱一家人】&#x1f345; 玩转CANoe&…

PCB设计——51单片机核心板布线以及原理图

首先是最小系统板&#xff0c;包括晶振电路&#xff0c;电源电路&#xff0c;复位电路 对应pcb板图

HTTP协议:网络通信的基石

一、引言 HTTP&#xff08;HyperText Transfer Protocol&#xff09;&#xff0c;即超文本传输协议&#xff0c;是当今互联网世界中最为重要的协议之一。它是客户端和服务器之间进行通信的规则和标准&#xff0c;使得我们能够在浏览器中浏览网页、下载文件、提交表单等各种操作…

AT32F403A/421 SVPWM驱动无刷电机开环速度测试

AT32F403A/421 SVPWM驱动无刷电机开环速度测试 &#x1f4cc;相关篇《HAL STM32F4 ARM DSP库跑SVPWM开环速度测试》 ✨本测试工程基于上面的运行例程移植而来。主要用来测试驱动无刷电机性能方面的差异。 &#x1f516;工程基于AT32_Work_Bench创建。 &#x1f530;AT32F403A和…

卷积神经网络随记

1.问题描述&#xff1a;一般而言&#xff0c;几个小滤波器卷积层的组合比一个大滤波器卷积层要好&#xff0c;比如层层堆叠了3个3x3的卷积层&#xff0c;中间含有非线性激活层&#xff0c;在这种排列下面&#xff0c;第一个卷积层中每个神经元对输入数据的感受野是3x3&#xff…

Verilog语言和C语言的本质不同点是什么?

在开始前刚好我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「c语言的资料从专业入门到高级教程」&#xff0c;点个关注在评论区回复“666”之后私信回复“666”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xff01; 在c语言中&#xff0c;如果你…

7.Redis的Hash类型

Hash类型&#xff0c;也叫散列&#xff0c;其value是一个无序字典&#xff0c;类似于HashMap结构。 问题 String结构是将对象序列化为json字符串后存储&#xff0c;当需要修改对象某个字段是不是很方便。 key value…

【计算机遥感方向】SCI期刊推荐!水刊、顶刊齐聚在此,速投!

本期将为您带来五本计算机SCI 妥妥毕业神刊&#xff01; IEEE TRANSACTIONS ON GEOSCIENCE AND REMOTE SENSING International Journal of Applied Earth Observation and Geoinformation INTERNATIONAL JOURNAL OF REMOTE SENSING Geocarto International RADIO SCIEN…

蔚来智驾的大模型之路:自研芯片 + 世界模型 + 群体智能

作者 |德新 编辑 |王博 7月27日上周末&#xff0c;蔚来举办第二届NIO IN。 李斌说&#xff0c;2023年的第一届NIO IN像是一个大纲&#xff0c;第一次对外完整展示了蔚来布局的12大技术领域。 而这届&#xff0c;更像第一个交付的章节。它重点展示了5项阶段性的进展&#xff…

智能电池管理,soc、soh、comsol锂电池仿真

锂离子电池&#xff0c;作为能源转型与电动车市场崛起的基石&#xff0c;正迎来研发与应用的飞跃。面对繁杂设计参数与实验盲点&#xff0c;电池仿真技术&#xff0c;尤以COMSOL为代表的多物理场仿真&#xff0c;精准解析电池内部机理&#xff0c;从微观行为到宏观性能&#xf…