从零开始开发纯血鸿蒙应用之网络检测

news2025/6/8 7:23:48

从零开始开发纯血鸿蒙应用

  • 〇、前言
  • 一、认识 connection 模块
    • 1、获取默认网络
    • 2、获取网络能力信息
    • 3、解析网络能力信息
      • 3.1、NetCap
      • 3.2、NetBearType
  • 二、实现网络检测功能
    • 1、申请权限
    • 2、获取默认网路的 NetCap 数组
  • 三、总结

〇、前言

在之前的博文里,介绍了如何实现简单的 RSS 订阅功能,然而,当时是默认手机处于有网状态的,这显然是有缺陷的,因为手机必然会出现无网络的时候,而鸿蒙 SDK 中 WebView 并没有提供默认的白页,也即当手机无网时,用WebView 实现的页面不会有什么网络状态相关的提示,就更不用说那些显示内容来自网络请求的原生页面。

为了提高用户的体验,APP 必然需要具备网络检测能力,当出现网络连接断开时,可以给出相应的正确提示,那么,在鸿蒙应用中,如何才能实现这一功能呢?下面就像大家介绍如何使用 connection 模块实现网络检测能力。

一、认识 connection 模块

在鸿蒙SDK中,有一个专门负责网络相关功能的 Network Kit,其中又包含名为 @ohos.net.connection的网络连接管理模块,提供管理网络的一些基础能力,如获取默认网络及其网络能力信息

使用 connection 模块完成网络检测,可以按照如下步骤进行:
1)获取默认网络对应的 handle 实例
2)利用 NetHandle 获取具体的网络能力信息
3)解析网络能力信息,判断网络类型以及连接状态

1、获取默认网络

想要获取鸿蒙设备的默认网络对应的 handle 实例,可以使用 connection 模块提供的 getDefaultNet 方法,或者使用对应的非异步方法 getDefaultNetSync;使用异步回调的方法,则需要透传一个回调函数,而 Promise 方式的异步方法和同步方法,都不需要透传参数。
在这里插入图片描述

2、获取网络能力信息

这一步,可以使用 connection 模块的 getNetCapabilities 方法或 getNetCapabilitiesSync 方法,这两个方法都需要透传一个 NetHandle 类型的参数,也就是上一步的结果。
在这里插入图片描述
getNetCapabilitiesSync 方法或 getNetCapabilities 方法返回的 NetCapabilities 对象中,包含了一下网络能力相关的信息:
在这里插入图片描述
主要就是网速、网络连接状态和网络类型。
在这里插入图片描述

3、解析网络能力信息

主要就是进一步解析 NetCapabilities 对象中包含的 networkCap 字段和 bearerTypes 字段。

3.1、NetCap

NetCap 对象,表示网络具体能力,是一个枚举值类型,当前版本的 API 中,一共有如下7个枚举值:

  1. NET_CAPABILITY_MMS:表示网络可以访问运营商的MMSC(Multimedia Message Service,多媒体短信服务)发送和接收彩信。
  2. NET_CAPABILITY_NOT_METERED:表示网络流量未被计费
  3. NET_CAPABILITY_INTERNET:表示该网络应具有访问Internet的能力,该能力由网络提供者设置,但该网络访问Internet的连通性并未被网络管理成功验证。
  4. NET_CAPABILITY_NOT_VPN:表示网络不使用VPN(Virtual Private Network,虚拟专用网络)。
  5. NET_CAPABILITY_VALIDATED:表示网络管理通过该网络与华为云地址成功建立连接,该能力由网络管理模块设置。请注意,网络管理可能会与华为云地址建立连接失败,导致网络能力不具备此标记位,但不完全代表该网络无法访问互联网。另外,对于新完成连接的网络,由于网络正在进行连通性验证,此值可能无法反映真实的验证结果。
  6. NET_CAPABILITY_PORTAL:表示系统发现该网络存在强制网络门户,需要用户登陆认证,该能力由网络管理模块设置。
  7. NET_CAPABILITY_CHECKING_CONNECTIVITY:表示网络管理正在检验当前网络的连通性,此值会在网络连接时设置,直到连通性检测结束后不再设置,当此值存在时,NET_CAPABILITY_VALIDATED的值可能不准确。

如果,通过 getNetCapabilitiesSync 方法获取到的 NetCapabilities 对象中的 NetCap 数组,就包含了 NET_CAPABILITY_INTERNET 或 NET_CAPABILITY_VALIDATED,就表明具有访问互联网的能力。

3.2、NetBearType

网络类型,具体分为如下:
在这里插入图片描述

二、实现网络检测功能

1、申请权限

由于网络检测功能,需要使用到设备硬件,因此,需要向系统申请权限,具体权限名为 ohos.permission.GET_NETWORK_INFO,由于该权限是非受限的,可以直接在 entry 模块的 module.json5 文件中配置:
在这里插入图片描述

2、获取默认网路的 NetCap 数组

由于网络检测功能,可以作为APP的基础功能,在多个页面中进行使用,因此,可以在 util 模块中,实现一个 NetworkCapabilityUtil 方法,并在其中实现获取 NetHandle 和 NetCapabilities 等对象的方法:
在这里插入图片描述
结合 NetworkCapabilityUtil 类的 getNetworkCapability 方法,在需要集成网络检测功能的页面,封装一个进一步判断网络能力的方法:
在这里插入图片描述
两相结合,再加上适当的辅助代码,就可以完成网络检测:
在这里插入图片描述
像这段代码,可以放在任意一个点击之后需要访问互联网的组件的点击事件处理函数中。而类似网络类型的解析,则可以用如下代码实现:
在这里插入图片描述

三、总结

鸿蒙设备如手机,虽然可以同时打开数据开关和WIFI开关,但具体访问网络时,通常只会使用到一种网络连接,默认情况下,WIFI优先级高于手机数据,因此,有WIFI的情况下,默认网络就是WIFI,没有WIFI的情况下默认网络就是手机数据(蜂窝网络)。

特别的,在一些IoT应用场景,如查看监控视频的APP,则需要反其道行之,即当默认网络为无互联网访问能力的时候,才表示与监控的连接是没有断开的,反之,当默认网络变成了可以访问互联网的,则意味着与监控的连接断开了。

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

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

相关文章

向 AI Search 迈进,腾讯云 ES 自研 v-pack 向量增强插件揭秘

作者:来自腾讯云刘忠奇 2025 年 1 月,腾讯云 ES 团队上线了 Elasticsearch 8.16.1 AI 搜索增强版,此发布版本重点提升了向量搜索、混合搜索的能力,为 RAG 类的 AI Search 场景保驾护航。除了紧跟 ES 官方在向量搜索上的大幅优化动…

【win | docker开启远程配置】使用 SSH 隧道访问 Docker的前操作

在主机A pycharm如何连接远程主机B win docker? 需要win docker配置什么? 快捷配置-主机B win OpenSSH SSH Server https://blog.csdn.net/z164470/article/details/121683333 winR,打开命令行,输入net start sshd,启动SSH。 或者右击我的电脑&#…

股指期货波动一个点多少钱?

很多朋友在交易股指期货时,都会好奇一个问题:股指期货波动一个点,我的账户里到底是赚了还是亏了多少钱?要搞清楚这个问题,其实很简单,只需要了解两个关键信息:股指期货的“交易单位”&#xff0…

iOS、Android、鸿蒙、Web、桌面 多端开发框架Kotlin Multiplatform

Kotlin Multiplatform(简称 KMP)是 JetBrains 推出的开源跨平台开发框架 Kuikly 是腾讯开源的跨端开发框架,基于 Kotlin Multiplatform 技术构建,为开发者提供了技术栈更统一的跨端开发体验 KMP 不仅局限于移动端,它…

探索C++标准模板库(STL):String接口的底层实现(下篇)

前引:在C的面向对象编程中,对象模型是理解语言行为的核心。无论是类的成员函数如何访问数据,还是资源管理如何自动化,其底层机制均围绕两个关键概念展开:this指针与六大默认成员函数。它们如同对象的“隐形守护者”&am…

Flutter知识点汇总

Flutter架构解析 1. Flutter 是什么?它与其他移动开发框架有什么不同? Flutter 是 Google 开发的开源移动应用开发框架,可用于快速构建高性能、高保真的移动应用(iOS 和 Android),也支持 Web、桌面和嵌入式设备。。它与其他移动开发框架(如 React Native、Xamarin、原…

​线性注意力 vs. 传统注意力:效率与表达的博弈新解

​核心结论​:线性注意力用计算复杂度降维换取全局建模能力,通过核函数和结构优化补足表达缺陷 一、本质差异:两种注意力如何工作? ​特性​传统注意力(Softmax Attention)线性注意力(Linear At…

YOLO在QT中的完整训练、验证与部署方案

以下是YOLO在QT中的完整训练、验证与部署方案: 训练方案 准备数据集: 收集数据:收集与目标检测任务相关的图像数据集,可以是公开数据集如COCO、Pascal VOC,也可以是自定义数据集。标注数据:使用标注工具如…

增量式网络爬虫通用模板

之前做过一个项目,他要求是只爬取新产生的或者已经更新的页面,避免重复爬取未变化的页面,从而节省资源和时间。这里我需要设计一个增量式网络爬虫的通用模板。可以继承该类并重写部分方法以实现特定的解析和数据处理逻辑。这样可以更好的节约…

【JVM】三色标记法原理

在JVM中,三色标记法是GC过程中对象状态的判断依据,回收前给对象设置上不同的三种颜色,三色分为白色、灰色、黑色。根据颜色的不同,决定对象是否要被回收。 白色表示: 初始状态:所有对象未被 GC 访问。含义…

【uniapp开发】picker组件的使用

项目uniapp,结合fastadmin后端开发 picker组件的官方文档说明 https://en.uniapp.dcloud.io/component/picker.html#普通选择器 先看效果: 1、实现设备类型的筛选;2、实现设备状态的筛选; 前端代码(节选&#xff0…

【HarmonyOS Next之旅】DevEco Studio使用指南(三十一) -> 同步云端代码至DevEco Studio工程

目录 1 -> 同步云函数/云对象 1.1 -> 同步单个云函数/云对象 1.2 -> 批量同步云函数/云对象 2 -> 同步云数据库 2.1 -> 同步单个对象类型 2.2 -> 批量同步对象类型 3 -> 一键同步云侧代码 1 -> 同步云函数/云对象 说明 对于使用DevEco Studio…

go-zero微服务入门案例

一、go-zero微服务环境安装 1、go-zero脚手架的安装 go install github.com/zeromicro/go-zero/tools/goctllatest2、etcd的安装下载地址根据自己电脑操作系统下载对应的版本,具体的使用自己查阅文章 二、创建一个user-rpc服务 1、定义user.proto文件 syntax &qu…

Python控制台输出彩色字体指南

在Python开发中,有时我们需要在控制台输出彩色文本以提高可读性或创建更友好的用户界面。本文将介绍如何使用colorama库来实现这一功能。 为什么需要彩色输出? 提高可读性:重要信息可以用不同颜色突出显示更好的用户体验:错误信息…

开源之夏·西安电子科技大学站精彩回顾:OpenTiny开源技术下沉校园,点燃高校开发者技术热情

开源之夏2025编程活动正在如火如荼的进行中,当前也迎来了报名的倒计时阶段,开源之夏组织方也通过高校行系列活动进入各大高校,帮助高校开发者科普开源文化、开源活动、开源技术。 6月4日 开源之夏携手多位开源技术大咖、经验型选手走进西安电…

解决数据库重启问题

最近部署软件时,发现mysql会一直在重启,记录下解决办法: 1.删除/home/dataexa/install/docker/datas/mysql路径下的data文件夹 2.重新构建mysql docker-compose up -d --build mysql 3.停掉所有应用,在全部重启: do…

前后端交互过程中—各类文件/图片的上传、下载、显示转换

前后端交互过程中—各类文件/图片的上传、下载、显示转换 图片补充:new Blob()URL.createObjectURL()替代方案:FileReader.readAsDataURL()​​对比: tiff文件TIFF库TIFF转换通过url转换tiff文件为png通过文件选择的方式转换tiff文件为png 下…

数据库同步是什么意思?数据库架构有哪些?

目录 一、数据库同步是什么 (一)基本概念 (二)数据库同步的类型 (三)数据库同步的实现方式 二、数据库架构的类型 (一)单机架构 (二)主从复制架构 &a…

【数据结构】详解算法复杂度:时间复杂度和空间复杂度

🔥个人主页:艾莉丝努力练剑 ❄专栏传送门:《C语言》、《数据结构与算法》 🍉学习方向:C/C方向 ⭐️人生格言:为天地立心,为生民立命,为往圣继绝学,为万世开太平 前言&…

Rest-Assured API 测试:基于 Java 和 TestNG 的接口自动化测试

1. 右键点击项目的文件夹,选择 New > File。 2. 输入文件名,例如 notes.md,然后点击 OK。 3. 选择项目类型 在左侧的 Generators 部分,选择 Maven Archetype,这将为你生成一个基于 Maven 的项目。 4. 配置项目基…