写点什么

鸿蒙网络编程系列 16- 获取 Wifi 信息示例

作者:长弓三石
  • 2024-10-22
    广东
  • 本文字数:2289 字

    阅读完需:约 8 分钟

1. Wifi 信息简介

对于移动设备来说,一般都提供了无线网卡,可以在需要时连接无线网络,这时候就可以获取相关的无线网络信息,比如热点名称、连接频段、链接速度、IP 地址、MAC 地址等,鸿蒙系统提供了丰富的无线网络管理 API,可以轻松获取相关 WIFI 信息。

2. Wifi 信息获取常用方法

鸿蒙封装的 wifiManager 模块使用如下的方式导入:


import wifiManager from '@ohos.wifiManager';
复制代码


wifiManager 模块包括了众多的操作方法,就本文而言,重点需要掌握的是如下三个:


1)isWifiActive(): boolean


查询 WLAN 是否已使能,如果使用者关闭了 Wifi 功能,就返回 false


2)getLinkedInfo(): Promise


获取 WLAN 连接信息,使用 Promise 异步回调。


3)getIpInfo(): IpInfo


获取 IP 信息,这是一个同步方法。

3. 获取 Wifi 信息示例

本示例会获取当前设备的 Wifi 信息,运行后的初始界面如下所示:



下面详细介绍创建该应用的步骤。


步骤 1:创建 Empty Ability 项目。


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


"requestPermissions": [      {        "name": "ohos.permission.GET_WIFI_INFO"      }    ]
复制代码


这里添加了获取 WIFI 信息的权限。


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


import wifiManager from '@ohos.wifiManager';
@Entry@Componentstruct Index { //连接、通讯历史记录 @State msgHistory: string = '' scroller: Scroller = new Scroller()
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.showWifiInfo() }) .width(70) .fontSize(14) .flexGrow(0) } .width('100%') .padding(10)
Scroll(this.scroller) { Text(this.msgHistory) .textAlign(TextAlign.Start) .padding(10) .width('100%') .backgroundColor(0xeeeeee) } .align(Alignment.Top) .backgroundColor(0xeeeeee) .height(300) .flexGrow(1) .scrollable(ScrollDirection.Vertical) .scrollBar(BarState.On) .scrollBarWidth(20) } .width('100%') .justifyContent(FlexAlign.Start) .height('100%') } .height('100%') }
showWifiInfo() { if (wifiManager.isWifiActive()) { this.msgHistory += `Wifi可用\r\n`; this.showIPInfo() this.showLinkedInfo() } else { this.msgHistory += `Wifi不可用\r\n`; } }
//显示IP相关信息 showIPInfo() { let ipInfo = wifiManager.getIpInfo();
let ipAddr = getIpAddrFromNum(ipInfo.ipAddress) this.msgHistory += `IP地址: ${ipAddr}\r\n`;
let gateAddr = getIpAddrFromNum(ipInfo.gateway) this.msgHistory += `网关地址: ${gateAddr}\r\n`;
let maskAddr = getIpAddrFromNum(ipInfo.netmask) this.msgHistory += `子网掩码: ${maskAddr}\r\n`;
let dnsAddr = getIpAddrFromNum(ipInfo.primaryDns) this.msgHistory += `DNS服务器: ${dnsAddr}\r\n`;
let dhcpServer = getIpAddrFromNum(ipInfo.serverIp) this.msgHistory += `DHCP服务器: ${dhcpServer}\r\n`;
this.msgHistory += `租用时长: ${ipInfo.leaseDuration}\r\n`; }
//显示和设备相关信息 showLinkedInfo() { wifiManager.getLinkedInfo() .then((linkedInfo) => { let len =linkedInfo.ssid.length let ssid = linkedInfo.ssid.substring(1,len-1) this.msgHistory += `SSID: ${ssid}\r\n`; this.msgHistory += `信号强度: ${linkedInfo.rssi}\r\n`; this.msgHistory += `网络频段: ${linkedInfo.band}\r\n`; this.msgHistory += `链接速度: ${linkedInfo.linkSpeed}\r\n`; this.msgHistory += `网络频率: ${linkedInfo.frequency}\r\n`; this.msgHistory += `MAC地址: ${linkedInfo.macAddress}\r\n`; } ) }}
//根据数字形式的IP地址获取字符串形式的IP地址function getIpAddrFromNum(ipNum: number): string { return (ipNum >>> 24) + '.' + (ipNum >> 16 & 0xFF) + '.' + (ipNum >> 8 & 0xFF) + '.' + (ipNum & 0xFF);}
复制代码


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


步骤 5:单击“获取”按钮,截图如下所示:



这样就完成了一个简单的 Wifi 信息获取应用。

3. 重点功能分析

虽然本例较简单,但是有一点要注意,就是从数字形式的 IP 地址转换为字符串形式的 IP 地址,这是通过函数 getIpAddrFromNum 实现的:


//根据数字形式的IP地址获取字符串形式的IP地址function getIpAddrFromNum(ipNum: number): string {  return (ipNum >>> 24) + '.' + (ipNum >> 16 & 0xFF) + '.' + (ipNum >> 8 & 0xFF) + '.' + (ipNum & 0xFF);}
复制代码


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


本文源码地址:


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


本系列源码地址:


https://gitee.com/zl3624/harmonyos_network_samples


发布于: 刚刚阅读数: 6
用户头像

长弓三石

关注

还未添加个人签名 2024-10-16 加入

二十多年软件开发经验的软件架构师,华为HDE、华为云HCDE、仓颉语言CLD、CCS,著有《仓颉语言网络编程》、《仓颉语言元编程》、《仓颉语言实战》、《鲲鹏架构入门与实战》等书籍,清华大学出版社出版。

评论

发布
暂无评论
鸿蒙网络编程系列16-获取Wifi信息示例_DevEco Studio_长弓三石_InfoQ写作社区