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

[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<(status: NetworkType) => 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-Ficase 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.xdnf.cn/news/11880.html

相关文章:

  • OpenHarmony平台驱动使用(十五),SPI
  • 玄机-第六章 流量特征分析-蚂蚁爱上树
  • Kafka 单机部署启动教程(适用于 Spark + Hadoop 环境)
  • 微信小程序前端面经
  • Hot100 Day02(移动0,乘最多水的容器、三数之和、接雨水)
  • 还原Windows防火墙
  • 点评中是如何实现短信登录的
  • 【C++】AVL树的概念及实现(万字图文超详解)
  • 电路图识图基础知识-降压启动(十五)
  • Python数据可视化科技图表绘制系列教程(二)
  • java从azure中读取用户信息
  • Kafka入门- 基础命令操作指南
  • NBA名人堂之-查尔斯·巴克利|里克·巴里|罗伯特·帕里什|斯科蒂·皮蓬|戴夫·德布斯切尔
  • VC++制作连连看辅助经验分享
  • Preference 系统自带的偏好设置页面解析
  • android中的TextWatcher的应用
  • Android应用获取root权限,修改系统文件
  • CentOS搭建并配置Nexus3记录
  • 干货整理:电脑监控软件都有哪些,哪款好用( 六大好用监控电脑软件推荐)
  • gps wifi信号测试软件,搜星+WiFi+EMI 导航平板信号性能横评
  • vb与EXCEL的连接
  • 由于找不到d3dx9_39.dll,无法继续执行代码的5种解决方法
  • 串口数据转以太网
  • Java入门基础,Java知识点总结合集
  • 迅雷老版本下载地址
  • 【学术相关】最新整理!绝对不能错过的130个学术网站和26个科研工具
  • OA系统:一文读懂OA系统,内附优秀OA界面。
  • nginx配置文件特殊字符说明
  • python实现抖音上比较火的罗盘时钟
  • 逆向工程入门学习(FreeBuf)