04 WIFI 信息获取应用案例
1. 案例功能简述
该案例的核心功能是实现鸿蒙设备以太网的动/静态IP模式切换与网络配置管理,具体如下:
- 网口信息获取:自动检测设备活跃的以太网接口(如
eth0
),并获取当前网口的IP、网关、子网掩码等配置。 - IP模式切换:通过界面按钮,在动态IP(由路由器DHCP自动分配IP)和静态IP(手动输入指定IP)模式间切换。
- 配置生效验证:切换模式或修改静态IP后,实时更新界面显示并输出日志,验证网络配置是否成功应用。
2. 案例代码展示
import ethernet from '@ohos.net.ethernet'
import { BusinessError } from '@ohos.base';
@Entry
@Component
struct Index {
@State message: string = '以太网Demo';
private TAG : string = 'ent_Demo'
@State entModeTest : string = '当前动态Ip'
@State entName : string = "eth0"
@State entModeStatus : boolean = true;//动/静态Ip的判断
@State entMsg : string = ''
@State entIp : string = ''
@State entRoute : string = ''
@State entGateway : string = ''
@State entMask : string = ''
@State entDNS : string = ''
@State entMode : number = 1;
aboutToAppear(): void {
this.getAllActiveIfaces();
this.getIfaceConfig();
}
setIfaceConfig(){
let config: ethernet.InterfaceConfiguration = {
mode: this.entMode,
ipAddr: this.entIp,
route: this.entRoute,
gateway: this.entGateway,
netMask: this.entMask,
dnsServers: this.entDNS
};
const setConfigPromise = ethernet.setIfaceConfig("eth0", config);
setConfigPromise.then(() => {
console.log(this.TAG,"setIfaceConfig promise ok");
}).catch((error: BusinessError) => {
console.error(this.TAG,"setIfaceConfig promise error = " + JSON.stringify(error));
});
}
getIfaceConfig(){
ethernet.getIfaceConfig(this.entName).then((data: ethernet.InterfaceConfiguration) => {
console.log(this.TAG,"getIfaceConfig promise mode = " + data.mode);
console.log(this.TAG,"getIfaceConfig promise ipAddr = " + JSON.stringify(data.ipAddr));
console.log(this.TAG,"getIfaceConfig promise route = " + JSON.stringify(data.route));
console.log(this.TAG,"getIfaceConfig promise gateway = " + JSON.stringify(data.gateway));
console.log(this.TAG,"getIfaceConfig promise netMask = " + JSON.stringify(data.netMask));
console.log(this.TAG,"getIfaceConfig promise dnsServers = " + JSON.stringify(data.dnsServers));
if (data.mode == 0) {
this.entModeStatus = false;
}else {
this.entModeStatus = true
}
this.entMode = data.mode
this.entMsg = JSON.stringify(data).toString();
this.entRoute = data.route.toString();
this.entGateway = data.gateway.toString();
this.entMask = data.netMask.toString();
this.entDNS = data.dnsServers.toString();
}).catch((error: BusinessError) => {
console.error(this.TAG,"getIfaceConfig promise error = " + JSON.stringify(error));
});
}
isIfaceActive(){
ethernet.isIfaceActive("eth0").then((data: number) => {
console.log(this.TAG,"isIfaceActive promise = " + JSON.stringify(data));
}).catch((error: BusinessError) => {
console.log(this.TAG,"isIfaceActive promise error = " + JSON.stringify(error));
});
}
getAllActiveIfaces(){
ethernet.getAllActiveIfaces().then((data: string[]) => {
console.log(this.TAG,"getAllActiveIfaces promise data.length = " + JSON.stringify(data.length));
if (JSON.stringify(data.length) == '1' ) {
console.log(this.TAG,'data.length')
}
for (let i = 0; i < data.length; i++) {
console.log(this.TAG,"getAllActiveIfaces promise = " + JSON.stringify(data[i]));
}
}).catch((error:BusinessError) => {
console.error(this.TAG,"getAllActiveIfaces promise error = " + JSON.stringify(error));
});
}
build() {
Column() {
Text(this.message)
.fontSize(50)
.fontWeight(FontWeight.Bold)
.padding(20)
Button('点击切换动/静态IP')
.onClick(()=>{
if (this.entMode == 0) {
this.entMode = 1;
this.entModeTest = '当前动态Ip'
this.entModeStatus = true;
}else{
this.entMode = 0;
this.entModeTest = '当前静态Ip'
this.entModeStatus = false;
}
this.setIfaceConfig();
this.getIfaceConfig();
})
if (this.entModeStatus){
Column(){
TextInput({placeholder : '静态Ip'})
.onChange((value : string)=>{
this.entIp = value
})
}
.height(80)
.width(300)
.padding(10)
.margin(10)
}
Text(this.entModeTest)
.fontSize(50)
.fontWeight(FontWeight.Bold)
.padding(30)
Column(){
Text('网口信息')
Blank()
Text(this.entMsg)
}
.height(80)
.padding(10)
}
.width('100%')
}
}
3. 案例源码及 HAP 包获取
3.1 案例源码获取
1)百度网盘资料中下载 EntDemo_API12.zip。 链接: 提取码:
备注:
项目路径:
ShimetaPi开源鸿蒙资料>SC-3568HA>05-开发资料>01-OpenHarmory 开发资料>APP Demo>EntDemo_API12.zip
2)解压压缩包后通过 DevEco Studio 打开工程即可查看源码。
3.2 案例 HAP 包获取
1)百度网盘资料中下载 EntDemo_API12.hap。 链接: 提取码:

备注:
文件路径:
ShimetaPi开源鸿蒙资料>SC-3568HA>05-开发资料>01-OpenHarmory 开发资料>APP Demo>Hap_Package>EntDemo_API12.hap
2)案例通过 HAP 进行安装的过程同前面的串口助手和手写板案例一致,此处不再赘述。
4. 案例功能介绍
1)点击桌面图标进入到应用界面。

备注:
使用该应用时,需将开发板用网线与电脑或是路由器相连。
2)应用界面如下:

此时默认为动态IP显示,底下网口信息部分显示当前网口的配置(IP、网关、子网掩码等)。
3)在 DevEco studio 软件中的日志处可以查看这些信息,方式如下:

网口信息中包含了两部分内容,分别是当前所有活跃的网口以及当前网口的配置信息。
- data.length = 1 和 eth0 说明设备有 1 个活跃网口,名称为eth0(与代码中entName一致,无需修改)。
- 异常:若 data.length = 0,检查网线是否插紧、路由器是否通电,或设备网口是否损坏。
- mode = 1 表示当前是动态 IP 模式(1 = 动态,0 = 静态),ipAddr 是路由器通过 DHCP 分配的 IP,gateway 是路由器网关,这些值非空说明初始化成功。
4)应用程序还支持动/静态IP的切换,方式如下:
①在“静态ip”处填写网口IP,以“192.168.102.43”为例;
②单击切换按钮,此时即完成了由动态IP到静态IP的切换,最底下的网口信息处会同步更新信息。

5)在 DevEco studio 软件中的日志处同样可以查看这些信息。
显示“ent _Demo setIfaceconfig promise ok”说明切换成功

同时,所显示的网口信息亦会同步更新,“ipAddr”处应为自行设置的IP。

备注:
常见错误解读:
- Permission denied(权限被拒绝):检查 module.json5 中是否添加了 SET_NETWORK_INFO 和 GET_NETWORK_INFO 权限。
- Interface not found(接口未找到):网口名称可能不是eth0,需通过设备命令行 ifconfig 查看实际网口名称(如eth1),并修改代码中entName变量。
- Invalid configuration(配置无效):静态 IP 格式错误(如192.168.1.256),或网关与 IP 不在同一网段。