实用指南:[Harmony]网络状态监听

news/2025/10/8 13:59:31/文章来源:https://www.cnblogs.com/slgkaifa/p/19129556

实用指南:[Harmony]网络状态监听

权限

module.json5中添加必要权限:

// 声明应用需要请求的权限列表"requestPermissions": [  {    "name": "ohos.permission.GET_NETWORK_INFO", // 网络信息权限    "reason": "$string:network_info_reason",    "usedScene": {      "abilities": ['MFVoiceManager'],      "when": "always"    }  },  {    "name": "ohos.permission.INTERNET", // 网络权限    "reason": "$string:internet_reason",    "usedScene": {      "abilities": [],      "when": "always"    }  }],
{  "name": "network_info_reason",  "value": "需要网络信息权限用于监听网络的变化"},{  "name": "internet_reason",  "value": "需要网络权限用来网络请求"},

监听工具

/** * 网络状态监听工具类 * 功能:实时监测网络连接状态及类型变化 */import { connection } from '@kit.NetworkKit';import { BusinessError } from '@kit.BasicServicesKit';import ConsoleLog from '../extension/ConsoleLog'; // 网络类型定义type NetworkType = 'NONE' | 'CELLULAR' | 'WIFI' | 'ETHERNET'; class NetworkMonitor {  private static instance: NetworkMonitor;  private netConnection?: connection.NetConnection;  private listeners: Array void> = [];   // 单例获取  static getInstance(): NetworkMonitor {    if (!NetworkMonitor.instance) {      NetworkMonitor.instance = new NetworkMonitor();    }    return NetworkMonitor.instance;  }   /**   * 启动网络监听   */  startMonitoring(): void {    try {      this.netConnection = connection.createNetConnection();       // 注册网络状态监听      this.netConnection.register((err: BusinessError) => {        if (err) {          ConsoleLog.error(`网络状态监听注册失败: ${err.code}-${err.message}`);        } else {          ConsoleLog.log('网络状态监听注册成功');        }      });       // 监听网络可用事件      this.netConnection.on('netAvailable', (data: connection.NetHandle) => {        ConsoleLog.log('网络已连接');        this.checkNetworkType(data);      });       // 监听网络断开事件      this.netConnection.on('netLost', () => {        ConsoleLog.log('网络已断开 - 无互联网连接');      });       // 监听网络不可用事件      this.netConnection.on('netUnavailable', () => {        ConsoleLog.log('网络不可用');      });    } catch (error) {      ConsoleLog.error(`NetworkMonitor Initialization error: ${error}`);    }  }   // 检查当前网络类型  checkNetworkType(netHandle: connection.NetHandle) {    connection.getNetCapabilities(netHandle, (error: BusinessError, data: connection.NetCapabilities) => {      if (error) {        ConsoleLog.error('获取网络能力失败:', JSON.stringify(error));        return;      }       if (data && data.bearerTypes) {        const networkType = this.parseBearerType(data.bearerTypes[0]);        ConsoleLog.log('当前网络类型:', networkType);        this.triggerListeners(true, networkType); // 触发回调      }    });  }   /**   * 解析网络承载类型   * @param type 网络类型编码   * @returns 标准化网络类型   */  private parseBearerType(type?: number): NetworkType {    if (!type) return 'NONE';    switch(type) {      case connection.NetBearType.BEARER_CELLULAR: return 'CELLULAR'; // 蜂窝网络      case connection.NetBearType.BEARER_WIFI: return 'WIFI'; // Wi-Fi      case connection.NetBearType.BEARER_ETHERNET: return 'ETHERNET'; // 以太网      default: return 'NONE'; // 未知网络    }  }   /**   * 注册状态监听   * @param callback 状态变更回调函数   */  addListener(callback: (status: NetworkType) => void): void {    this.listeners.push(callback);  }   /**   * 移除状态监听   * @param callback 要移除的回调函数   */  removeListener(callback: Function): void {    this.listeners = this.listeners.filter(cb => cb !== callback);  }   // 在事件处理方法中触发回调(例如netAvailable事件)  private triggerListeners(isConnected: boolean, type: NetworkType) {    this.listeners.forEach(cb => cb(type));  }} export const networkMonitor = NetworkMonitor.getInstance();

示例

// 窗口舞台创建回调  onWindowStageCreate(windowStage: window.WindowStage): void {    ...networkMonitor.startMonitoring()  }

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

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

相关文章

微网站建设企划书制作网站心得

转载:C设计实现日志系统 - 知乎 (zhihu.com) 日志系统几乎是每一个实际的软件项目从开发、测试到交付,再到后期的维护过程中极为重要的 查看软件代码运行流程、 还原错误现场、 记录运行错误位置及上下文等的重要依据。一个高性能的日志系统&#xff0c…

在线教育网站建设策划WordPress自定义icon

目录 图像识别简介 神经网络 感知器 前馈神经网络 自动编码器 受限玻尔兹曼机 深度卷积网络 理解图像内容以及图像含义方面,计算机遇到了很大困难。本章先介绍计算机理解图像教育方面 遇到的难题,接着重点讲解一个基于深度学习的解决方法。我们会…

1000th post Problem 1

原题链接:https://artofproblemsolving.com/community/c4h3685828_1000th_post P1解法: 注意到有 \(\sum_{i=1}^n \frac{a_i}{s-a_i}=\sum_{i=1}^n\left(\frac{s}{b_i}-1\right)=\sum_{i=1}^n \frac{s}{b_i}+\sum_{i…

下行经济周期,就应该做只能在下行周期里做的事情

正文经济下行的时候,不要想着逆势而上,而要想着做那些只有在下行周期里才能做的事情。大部分人在经济不好的时候,要么焦虑,要么抱怨,要么等待。但是这些经济不好的时候,真的都是所谓的 Rubbish Time(垃圾时间)…

WPF Prism.Wpf RegionManager

Install-Package Prism.Wpf; Install-Package Prism.DryIOC; <Window x:Class="WpfApp28.Views.MainWin"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="ht…

题解:AT_agc065_d [AGC065D] Not Intersect

很牛的题。 题意:很简单了,不再赘述。 做法: 首先需要一个 Raney 引理:对于整数序列 \(a\),若 \(\sum a = 1\),则有且仅有一个 \(a\) 的循环位移满足前缀和均大于 \(0\)。 来简单证明一下,首先不会有两个及以上…

uniapp滚动导航 - unique

下面是效果图下面是实现代码<template><view class="container"><!-- 顶部导航 --><view class="navbar"><viewv-for="(item, index) in navList":key=&quo…

公司网站运营淮北建网站

一、概念 Java 内存区域和内存模型是不一样的东西&#xff0c;内存区域是指 Jvm 运行时将数据分区域存储&#xff0c;强调对内存空间的划分。 而内存模型&#xff08;Java Memory Model&#xff0c;简称 JMM &#xff09;是定义了线程和主内存之间的抽象关系&#xff0c;即 J…

三门网站制作峡江网站建设

背景&#xff1a;之前资产信息用网络接口进行数据推送&#xff0c;但是接口推送需要验证而且反应较慢。Kafak中间件提供了另一种可行的数据推送方式&#xff0c;它可以进行消息队列推送&#xff0c;且反应速度快。但是Kafka需部署在公网环境&#xff0c;并进行登录验证&#xf…

网站建设与维护视频教程篡改 网站 支付接口

面试经典&#xff08;4/150&#xff09;删除有序数组中的重复项 II 给你一个有序数组 nums &#xff0c;请你 原地 删除重复出现的元素&#xff0c;使得出现次数超过两次的元素只出现两次 &#xff0c; 返回删除后数组的新长度。不要使用额外的数组空间&#xff0c;你必须在 原…

滚动导航 - unique

下面是效果图下面是实现代码<!DOCTYPE html> <html lang="zh-CN"><head><meta charset="UTF-8" /><title>滚动导航 Demo</title><style>body {margin:…

windows剪切板工具

列表 不推荐 ditto 界面我不喜欢,作为一个前台交互软件,用户界面搞得这么小,图片都看不清。CrossPaste 还行,但是没有标签或者说分类。 也没有导出功能。 不知道为啥,窗口总是不置顶。 提供了多种类型,算是比较现…

C#基础:启用线程池执行并行任务

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

做字素的网站wordpress get option

从各方面来看&#xff0c;互联网向 IPv6 的过渡是件很缓慢的事情。不过在最近几年&#xff0c;可能是由于 IPv4 地址资源的枯竭&#xff0c;IPv6 的使用处于上升态势。相应的&#xff0c;开发者也有兴趣确保软件能在 IPv4 和 IPv6 下工作。但是&#xff0c;正如近期 OpenBSD 邮…

P1545 [USACO04DEC] Dividing the Path G 题解

P1545 [USACO04DEC] Dividing the Path G 题解 最近开始快刷蓝紫黑了,做完会写题解交上来。 题目传送门 题意 一条长为 \(L(1 \le L \le 10^6 , 2 | L)\) 的线段上,给出 \(N(1 \le N \le 10^3)\) 个可能相交的子段 \…

AJ-Report - 实践

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

视频采集程序

项目结构:VideoCaptureApp.pro QT += core gui multimedia multimediawidgetsgreaterThan(QT_MAJOR_VERSION, 4): QT += widgetsCONFIG += c++11win32 { LIBS += -L$$PWD/lib/SDL2/lib/x64 \-L$$PWD/lib/ffmpeg…

怎么做网站弄网盟wordpress qq微博

【客户行业】金属加工行业 【问题类型】薪酬体系/激励体系 【客户背景】 某大型金属加工企业位于河北地区&#xff0c;成立于2000年&#xff0c;隶属于某大型有色金属集团&#xff0c;是一家集科研、开发、生产、销售于一体的国有企业&#xff0c;人员达到1000人。经过多年…

50m专线做视频网站青羊区城乡建设网站

很多高手都喜欢使用“宏”命令来提高办公工作效率。但在 Microsoft Office 程序中使用宏时&#xff0c;总会弹出宏安全警告&#xff0c;这让使用者倍感麻烦。而如果把宏的安全级设置为“低”&#xff0c;就可以取消excel中宏安全提示框了&#xff0c;又增加了恶意代码和病毒攻击…

关于PPT的课后作业

动手动脑问题应用的是方法重载。 课后作业代码: import java.util.*; public class ArithmeticExam { private static final Random random = new Random(); private static final Scanner scanner = new Scanner(Sys…