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

鸿蒙网络编程系列34-Wifi热点扫描及连接示例

1. Wifi热点简介

Wifi热点是移动设备接入网络的重要形式,特别是在不具备固定网络接入点的情况下,可以通过Wifi热点灵活方便的接入网络,因此在日常生活中具有广泛的应用。鸿蒙系统也提供了方便的Wifi管理API,支持热点扫描,热点连接等功能,相关的能力归属于系统相关Kit开放能力中的Connectivity Kit(短距通信服务),使用如下的代码导入模块:

import { wifiManager } from '@kit.ConnectivityKit';

本文将通过一个示例演示扫描Wifi热点以及连接指定热点的功能,相关的主要Wifi能力接口如下所示:

//返回扫描到的热点列表
function getScanInfoList(): Array<WifiScanInfo>;//查询WLAN信号强度。
function getSignalLevel(rssi: number, band: number): number;//添加候选网络配置
function addCandidateConfig(config: WifiDeviceConfig): Promise<number>;//连接到自己添加的候选网络(如果当前已经连接到热点,需要先断开连接)。
function connectToCandidateConfig(networkId: number): void;

2. Wifi热点扫描及连接演示

本示例运行后的界面如图所示:

单击“扫描热点”按钮,会扫描附近的热点,界面如下所示:

这里列出了热点的名称、是否加密、网络制式以及信号强度。要连接某一个特定热点,单击热点后面的"连接"按钮即可,不过要注意的是,如果当前手机已经连接了一个热点,需要先断开连接才能连接新的热点,假设已经断开了Wifi连接,在某一个标识加密的热点后面单击"连接"按钮,会出现密码输入框,输入密码后,再单击"连接"按钮,会出现“连接至指定的候选WLAN”的弹出窗口,如图所示:

单击弹出窗口的"连接"按钮,即可连接到指定的热点,如图所示:

3. Wifi热点扫描及连接示例编写

下面详细介绍创建该示例的步骤。
步骤1:创建Empty Ability项目。

步骤2:在module.json5配置文件加上对权限的声明:

"requestPermissions": [{"name": "ohos.permission.GET_WIFI_INFO"},{"name": "ohos.permission.SET_WIFI_INFO"}]

这里添加了读取和设置Wifi配置的权限。

步骤3:添加WifiHotspotItem.ets文件,该文件定义了显示Wifi热点信息的子组件,代码如下:

import { wifiManager } from '@kit.ConnectivityKit';@ComponentV2
export struct WifiHotspotItem {@Param @Require WifiInfo: wifiManager.WifiScanInfo@Param @Require connectCallback: (item: wifiManager.WifiScanInfo, password: string) => void@Local showPassword: boolean = false@Local password: string = ""build() {Column() {Flex({ justifyContent: FlexAlign.End, alignItems: ItemAlign.Center }) {Text(this.WifiInfo.ssid).width(120).flexGrow(1)Text(this.WifiInfo.securityType == wifiManager.WifiSecurityType.WIFI_SEC_TYPE_OPEN ? "开放" : "加密").width(40)Text(this.WifiInfo.band == 1 ? "2.5G" : "5G").width(40)Rating({ rating: wifiManager.getSignalLevel(this.WifiInfo.rssi, this.WifiInfo.band), indicator: true }).stars(5).width(80)Button("连接").onClick(() => {if (this.WifiInfo.securityType != wifiManager.WifiSecurityType.WIFI_SEC_TYPE_OPEN) {this.showPassword = true} else {this.showPassword = false}if (this.showPassword && this.password == "") {return}this.connectCallback(this.WifiInfo, this.password)}).width(60).fontSize(12)}.width('100%')Flex({ justifyContent: FlexAlign.Start, alignItems: ItemAlign.Center }) {Text("请输入wifi密码").width(150)TextInput({ text: this.password }).onChange((value) => {this.password = value}).width(100).type(InputType.Password).flexGrow(1).fontSize(11)}.width('100%').visibility(this.showPassword ? Visibility.Visible : Visibility.None)}.width('100%').padding(5)}
}

步骤4:在Index.ets文件里添加如下的代码:

import { wifiManager } from '@kit.ConnectivityKit';
import { WifiHotspotItem } from './WifiHotspotItem';@Entry
@ComponentV2
struct Index {//Wifi热点列表@Local wifiHotspotParamList: wifiManager.WifiScanInfo[] = []build() {Row() {Column() {Text("Wifi热点管理").fontSize(14).fontWeight(FontWeight.Bold).width('100%').textAlign(TextAlign.Center).padding(10)Flex({ justifyContent: FlexAlign.End, alignItems: ItemAlign.Center }) {Button("扫描热点").onClick(() => {this.wifiHotspotParamList = wifiManager.getScanInfoList().sort((a, b) => {return wifiManager.getSignalLevel(b.rssi, b.band) - wifiManager.getSignalLevel(a.rssi, a.band)})}).width(120).fontSize(14)}.width('100%').padding(5)List({ space: 10, initialIndex: 0 }) {ForEach(this.wifiHotspotParamList, (item: wifiManager.WifiScanInfo) => {if (item.ssid != "") {ListItem() {WifiHotspotItem({ WifiInfo: item, connectCallback: this.connectWifiHotspot })}}})}.width('100%').padding(5)}.width('100%').justifyContent(FlexAlign.Start).height('100%')}.height('100%')}//执行连接的方法async connectWifiHotspot(wifiInfo: wifiManager.WifiScanInfo, password: string): Promise<void> {if (wifiManager.isConnected()) {AlertDialog.show({title: "提示",message: "请先断开Wifi连接",confirm: {value: '确定',action: () => {}}})return}let config: wifiManager.WifiDeviceConfig = {ssid: wifiInfo.ssid,preSharedKey: password,securityType: wifiInfo.securityType}let netId = await wifiManager.addCandidateConfig(config)wifiManager.connectToCandidateConfig(netId)}
}

步骤5:编译运行,可以使用模拟器或者真机。

步骤6:按照本节第2部分“Wifi热点扫描及连接演示”操作即可。

4. 代码分析

本示例主要有两点需要注意,第一点是关于热点的信号强度级别,虽然扫描时得到了热点的信号强度属性rssi,但是这个属性不适合按照强度级别来表示,本示例是通过getSignalLevel函数来查询得到信号强度对应的信号强度级别的;另外一点是连接到热点,系统并不是直接连接热点的,而是先把热点添加为候选网络,得到网络配置ID,然后再通过该ID连接到指定的热点网络,代码如下所示:

let config: wifiManager.WifiDeviceConfig = {ssid: wifiInfo.ssid,preSharedKey: password,securityType: wifiInfo.securityType}let netId = await wifiManager.addCandidateConfig(config)wifiManager.connectToCandidateConfig(netId)

(本文作者原创,除非明确授权禁止转载)

本文源码地址:

https://gitee.com/zl3624/harmonyos_network_samples/tree/master/code/wifi/WifiHotspotManager

本系列源码地址:

https://gitee.com/zl3624/harmonyos_network_samples


相关文章:

鸿蒙网络编程系列34-Wifi热点扫描及连接示例

1. Wifi热点简介 Wifi热点是移动设备接入网络的重要形式&#xff0c;特别是在不具备固定网络接入点的情况下&#xff0c;可以通过Wifi热点灵活方便的接入网络&#xff0c;因此在日常生活中具有广泛的应用。鸿蒙系统也提供了方便的Wifi管理API&#xff0c;支持热点扫描&#xf…...

LVS三种模式工作原理

常用负载均衡设备 实现负载均衡的技术的方式有哪些&#xff1a;硬件层面有F5负载均衡器&#xff0c;网络层层面有LVS(Linux Virtual Server)&#xff0c;应用层层面就是nginx、Haproxy等。 lvs工作在网络层&#xff0c;nginx工作在应用层。 LVS有三种工作模式 lvs是由章文崇…...

【二轮征稿启动】第三届环境工程与可持续能源国际会议持续收录优质稿件

第三届环境工程与与可持续能源国际会议&#xff08;EESE 2024&#xff09;由中南林业科技大学主办&#xff0c;湖南农业大学协办&#xff0c;将于2024年12月20日-22日在湖南长沙召开。 大会邀请到国家杰出青年科学基金获得者、华中科技大学能源与动力工程学院冯光教授&#xf…...

网络安全——防火墙技术

目录 前言基本概念常见防火墙技术防火墙的主要功能防火墙的不足之处相关题目1.组织外部未授权用户访问内部网络2.DMZ区3.包过滤防火墙和代理服务防火墙 前言 这是在软件设计师备考时编写的资料文章&#xff0c;相关内容偏向软件设计师 基本概念 防火墙技术是网络安全领域中的…...

Missing classes detected while running R8报错解决方案

Android 打包release版本时报错如下&#xff1a; > Task :printlib:minifyReleaseWithR8 FAILED AGPBI: {"kind":"error","text":"Missing classes detected while running R8. Please add the missing classes or apply additional ke…...

智能指针

目录 1. 为什么需要智能指针&#xff1f; 2. 内存泄漏 2.1 什么是内存泄漏&#xff0c;内存泄漏的危害 2.2 内存泄漏分类&#xff08;了解&#xff09; 堆内存泄漏(Heap leak) 系统资源泄漏 2.3 如何检测内存泄漏&#xff08;了解&#xff09; 2.4如何避免内存泄漏 3.…...

通过DevTools逃离Chrome沙盒(CVE-2024-6778和CVE-2024-5836)

介绍 这篇博文详细介绍了如何发现CVE-2024-6778和CVE-2024-5836的&#xff0c;这是Chromium web浏览器中的漏洞&#xff0c;允许从浏览器扩展&#xff08;带有一点点用户交互&#xff09;中进行沙盒逃逸。 简而言之&#xff0c;这些漏洞允许恶意的Chrome扩展在你的电脑上运行…...

手持无人机飞手执照,会组装调试入伍当兵有多香!

手持无人机飞手执照&#xff0c;并具备组装调试技能&#xff0c;在入伍当兵时确实会具有显著的优势和吸引力。以下是对这一情况的详细分析&#xff1a; 一、无人机飞手执照的优势 1. 法规遵从与安全保障&#xff1a; 根据《民用无人驾驶航空器系统驾驶员管理暂行规定》等相关…...

项目经理好累好烦啊,不想干了....

打住&#xff01; 先问问自己&#xff0c;在所有的项目管理过程中&#xff0c;有没有体验到任和何乐趣。如果没有&#xff0c;请不要再继续内耗。 如果有&#xff0c;慎重考虑&#xff0c;然后适当解压&#xff0c;每个岗位都会不同的烦心事&#xff0c;每个企业都不完美&…...

论技术人员“技术人格”的重要意义

此论题从表面上看&#xff0c;是社会科学的&#xff0c;或者心理学的。然其对于信息技术这种科学的工作&#xff0c;又显得非常的重要。作为信息技术的从业者&#xff0c;或者说科学的从业者&#xff0c;具备良好的“技术人格”&#xff0c;对确保工作的质量&#xff0c;与正确…...

Kafka异常重试方案小记

背景 在最近进行的项目架构升级中&#xff0c;我们对原有的核心项目结构进行了细致的拆分。 现在&#xff0c;核心项目与非核心项目之间的通信和数据交换主要通过Kafka这一中间件来实现。 这种设计主要体现在核心项目向非核心项目发送通知&#xff0c;这些通知大致可以分为三个…...

非页面缓冲池占用过高处理方法

1.现象 电脑变莫名其妙得特别卡&#xff0c;明明16G的内存&#xff0c;理论上日常使用&#xff0c;打游戏之类的使用起来完全不会有什么大问题&#xff0c;但是实际使用却是卡的要死。 下面开始查找原因。 2.查找原因 使用win自带的任务管理器&#xff0c;可以看到日常内存…...

【Linux】进程信号(下)

目录 一、信号的阻塞 1.1 信号在内核中的保存方式 1.2 sigset_t信号集 &#xff08;1&#xff09;信号集操作 &#xff08;2&#xff09;sigprocmask函数 &#xff08;3&#xff09;sigpending函数 二、信号的处理 2.1 用户态和内核态 2.2 重谈进程地址空间 三、信号…...

FlinkCDC 实现 MySQL 数据变更实时同步

文章目录 1、基本介绍2、代码实战2.1、数据源准备2.2、代码实战2.3、数据格式 1、基本介绍 Flink CDC 是 Apache Flink 提供的一个功能强大的组件&#xff0c;用于实时捕获和处理数据库中的数据变更。可以实时地从各种数据库&#xff08;如MySQL、PostgreSQL、Oracle、MongoDB…...

JavaWeb——Maven(4/8):Maven坐标,idea集成-导入maven项目(两种方式)

目录 Maven坐标 导入Maven项目 第一种方式 第二种方式 Maven坐标 Maven 坐标 是 Maven 当中资源的唯一标识。通过这个坐标&#xff0c;我们就能够唯一定位资源的位置。 Maven 坐标主要用在两个地方。第一个地方&#xff1a;我们可以使用坐标来定义项目。第二个地方&#…...

实现uniapp天地图边界范围覆盖

在uniapp中&#xff0c;难免会遇到使用地图展示的功能&#xff0c;但是百度谷歌这些收费的显然对于大部分开源节流的开发者是不愿意接受的&#xff0c;所以天地图则是最佳选择。 此篇文章&#xff0c;详细的实现地图展示功能&#xff0c;并且可以自定义容器宽高&#xff0c;还可…...

思科网络设备命令

一、交换机巡检命令 接口和流量状态 show interface stats&#xff1a;查看所有接口当前流量。show interface summary&#xff1a;查看所有接口当前状态和流量。show interface status&#xff1a;查看接口状态及可能的错误。show interface | include errors | FastEthernet …...

Egg.js使用ejs快速自动生成resetful风格的CRUD接口

目前的插件能够自动生成egg的crud的都不太好用 我们自己写一个吧 ejs模块 也方便定制 安装依赖 npm install ejs --save ejs 是一个简单易用的模板引擎&#xff0c;常用于 Node.js 应用程序中 在项目根目录下创建 template/controller.ejs 模板文件 use strict;const Co…...

自动化抖音点赞取消脚本批量处理

&#x1f31f; 前言 欢迎来到我的技术小宇宙&#xff01;&#x1f30c; 这里不仅是我记录技术点滴的后花园&#xff0c;也是我分享学习心得和项目经验的乐园。&#x1f4da; 无论你是技术小白还是资深大牛&#xff0c;这里总有一些内容能触动你的好奇心。&#x1f50d; &#x…...

基于YOLOv8深度学习的智能车牌检测与识别系统【python源码+Pyqt5界面+数据集+训练代码】目标检测、深度学习实战

背景及意义 智能车牌检测与识别系统通过使用最新的YOLOv8与PaddleOCR算法能够迅速、准确地在多种环境下实现实时车牌的检测和识别。本文基于YOLOv8深度学习框架&#xff0c;通过16770张图片&#xff0c;训练了一个进行车牌检测模型,可以检测蓝牌与绿牌,然后对检测到的车牌使用O…...

2025年能源电力系统与流体力学国际会议 (EPSFD 2025)

2025年能源电力系统与流体力学国际会议&#xff08;EPSFD 2025&#xff09;将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会&#xff0c;EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...

解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八

现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet&#xff0c;点击确认后如下提示 最终上报fail 解决方法 内核升级导致&#xff0c;需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...

HTML 列表、表格、表单

1 列表标签 作用&#xff1a;布局内容排列整齐的区域 列表分类&#xff1a;无序列表、有序列表、定义列表。 例如&#xff1a; 1.1 无序列表 标签&#xff1a;ul 嵌套 li&#xff0c;ul是无序列表&#xff0c;li是列表条目。 注意事项&#xff1a; ul 标签里面只能包裹 li…...

工程地质软件市场:发展现状、趋势与策略建议

一、引言 在工程建设领域&#xff0c;准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具&#xff0c;正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...

C++ 基础特性深度解析

目录 引言 一、命名空间&#xff08;namespace&#xff09; C 中的命名空间​ 与 C 语言的对比​ 二、缺省参数​ C 中的缺省参数​ 与 C 语言的对比​ 三、引用&#xff08;reference&#xff09;​ C 中的引用​ 与 C 语言的对比​ 四、inline&#xff08;内联函数…...

React---day11

14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store&#xff1a; 我们在使用异步的时候理应是要使用中间件的&#xff0c;但是configureStore 已经自动集成了 redux-thunk&#xff0c;注意action里面要返回函数 import { configureS…...

【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的“no matching...“系列算法协商失败问题

【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的"no matching..."系列算法协商失败问题 摘要&#xff1a; 近期&#xff0c;在使用较新版本的OpenSSH客户端连接老旧SSH服务器时&#xff0c;会遇到 "no matching key exchange method found"​, "n…...

python爬虫——气象数据爬取

一、导入库与全局配置 python 运行 import json import datetime import time import requests from sqlalchemy import create_engine import csv import pandas as pd作用&#xff1a; 引入数据解析、网络请求、时间处理、数据库操作等所需库。requests&#xff1a;发送 …...

OD 算法题 B卷【正整数到Excel编号之间的转换】

文章目录 正整数到Excel编号之间的转换 正整数到Excel编号之间的转换 excel的列编号是这样的&#xff1a;a b c … z aa ab ac… az ba bb bc…yz za zb zc …zz aaa aab aac…; 分别代表以下的编号1 2 3 … 26 27 28 29… 52 53 54 55… 676 677 678 679 … 702 703 704 705;…...

Axure 下拉框联动

实现选省、选完省之后选对应省份下的市区...