HarmonyOS 鸿蒙Next中如何通过接口获取本机的热点IP
HarmonyOS 鸿蒙Next中如何通过接口获取本机的热点IP 在本机开启热点后,应用如何才能获取到本机的热点IP,用于局域网传输文件定位设备
首先添加权限 ohos.permission.GET_WIFI_INFO
然后通过 wifiManager.getIpInfo() 获取wifi信息
import { wifiManager } from '@kit.ConnectivityKit';
@Entry
@Component
struct TestPage {
@State hotspotIP: string = '';
build() {
Column() {
Button('获取IP')
.onClick(() => {
this.getHotspotIP();
})
Text('IP: ' + this.hotspotIP)
.visibility(this.hotspotIP ? Visibility.Visible : Visibility.None)
}
}
getHotspotIP() {
// 可选:检查Wi-Fi是否激活
if (wifiManager.isWifiActive()) {
let ipInfo = wifiManager.getIpInfo();
if (ipInfo && ipInfo.ipAddress) {
let ipNum = ipInfo.ipAddress;
this.hotspotIP = (ipNum >>> 24) + "." + (ipNum >> 16 & 0xFF) + "." + (ipNum >> 8 & 0xFF) + "." + (ipNum & 0xFF);
} else {
console.error('未获取到IP信息');
}
} else {
console.error('Wi-Fi未开启');
}
}
}
更多关于HarmonyOS 鸿蒙Next中如何通过接口获取本机的热点IP的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
使用wifiManager模块获取ipInfo,然后转换为IP常用格式,注意wifiManager.getIpInfo()接口需要权限ohos.permission.GET_WIFI_INFO。
参考代码如下:
import { wifiManager } from '@kit.ConnectivityKit';
let ipAddress = wifiManager.getIpInfo().ipAddress;
let ip = (ipAddress >>> 24) + "." + (ipAddress >> 16 & 0xFF) + "." + (ipAddress >> 8 & 0xFF) + "." + (ipAddress & 0xFF);
import socket from '@ohos.net.socket';
async function getHotspotIp(): Promise<string> {
try {
// 获取所有网络接口
const networkInterfaces = await socket.getNetworkInterfaces();
for (const iface of networkInterfaces) {
// 根据经验判断,热点对应的接口名可能包含特定后缀,例如 'wlan1'
// 这个名称可能因设备而异,需要根据实际情况调整判断逻辑
if (iface.name.includes('wlan') && iface.index > 0) {
for (const addrInfo of iface.addressInfos) {
// 寻找IPv4地址
if (addrInfo.family === 'inet') {
return addrInfo.address;
}
}
}
}
} catch (error) {
console.error('Failed to get hotspot IP:', error);
}
return '';
}
本机开热点获取本机热点IP,ArkTS编程直接获取不到的。
让其他人连你热点,最后一位换成1就是开热点手机的IP。
PS:苹果手机固定 172.20.10.1
鸿蒙手机(P和mate试的):192.168.43.1
我没看到“直接获取本机热点 IP”的公开专用 API。公开能力是用 connection.getDefaultNet() 取默认网络,再 getConnectionProperties() 查看 linkAddresses;但热点开启时默认网络可能是蜂窝/上游网络,不一定是 AP 侧网关地址。做局域网文件传输更稳的是 socket 监听 0.0.0.0,枚举可用 IPv4 后展示或用局域网发现。 依据: https://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-net-connection https://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-wifiManager
你好,参考怎样获取本机的IP地址, 配置权限:
"requestPermissions": [
{
"name": "ohos.permission.INTERNET",
},
{
"name": "ohos.permission.GET_NETWORK_INFO",
"reason": "$string:webserver_get_network_info" //配置"用于获取本机的IP地址,局域网内传输文件"
}
]
}
获取本机IP方法:
import { connection, socket } from '@kit.NetworkKit';
/**
* 获取本地IP地址
* @returns IP地址字符串
*/
getLocalIP(): string {
try {
const netHandle = connection.getDefaultNetSync();
if (netHandle.netId === 0) {
// 当前没有已连接的网络时,获取的netHandler的netid为0
return '';
}
const connectionproperties = connection.getConnectionPropertiesSync(netHandle);
return connectionproperties.linkAddresses[0].address.address;
} catch (e) {
return '';
}
}
可以,但是需要先明确一点:
HarmonyOS 目前没有直接公开“获取热点IP”的专用 API。
但:
热点本质也是一个网络接口(AP)
所以可以通过:
- WiFi热点接口
- 网络接口枚举
- IP地址遍历
间接获取。
——————————
你这个场景:
手机开热点
局域网传文件
其它设备连接手机热点
实际上需要的是:
热点网关IP
通常:
Android / HarmonyOS 热点默认会是:
192.168.43.1
或者:
192.168.x.1
很多机型基本固定。
——————————
最简单方案(推荐)
直接枚举网络接口获取热点IP。
ArkTS 可以通过:
@ohos.net.connection
配合:
network.getAllNets()
以及:
getAddressesByName()
或者 Native 层:
NetworkInterface
来拿。
——————————
更直接一点:
HarmonyOS Native/Node 风格里通常直接:
import socket from '@ohos.net.socket'
或者:
import connection from '@ohos.net.connection'
然后:
枚举本机 IP。
——————————
实际开发里:
最稳的是:
遍历所有 IPv4 地址
找到:
192.168.*
且:
作为热点网关的地址
——————————
因为:
开启热点后:
手机本身会变成:
DHCP Server + Gateway
所以:
热点IP就是手机局域网IP
——————————
你可以重点看:
@ohos.net.connection
里的:
- getDefaultNet
- getNetCapabilities
- getAddressesByName
——————————
不过这里有个坑:
HarmonyOS 当前:
没有像 Android WifiManager 那种完整热点API
所以:
不能直接:
getWifiApIpAddress()
这种。
——————————
现实里很多人直接这么做:
方案1(最推荐)
固定热点IP。
因为华为热点大部分情况下:
192.168.43.1
非常稳定。
客户端直接连接:
192.168.43.1:端口
即可。
很多文件传输 App 都这么干。
——————————
方案2
服务端启动时:
枚举网卡:
过滤:
- wlan
- ap
- hotspot
对应 IP。
——————————
如果你是:
ArkTS 纯应用层
这里给你一个常见思路:
import connection from '@ohos.net.connection';
async function getLocalIp() {
try {
let netHandle = await connection.getDefaultNet();
let properties = await connection.getNetCapabilities(netHandle);
console.info(JSON.stringify(properties));
} catch (err) {
console.error(JSON.stringify(err));
}
}
——————————
但:
HarmonyOS API 现在对:
热点状态
热点IP
AP接口
开放并不完整。
所以:
很多情况下还是要:
Native C++
或者:
Node-API
去枚举系统网卡。
——————————
真正稳定可靠的方案:
推荐:
不要依赖“获取热点IP”
而是:
服务端主动广播。
例如:
- UDP广播
- mDNS
- NSD
- Bonjour
客户端自动发现设备。
这样:
不需要关心热点IP。
——————————
尤其你做:
局域网传文件
强烈建议:
UDP广播发现 + TCP传输
而不是手动 IP。
这是成熟方案。
——————————
最终总结:
HarmonyOS 当前:
没有专门公开“获取热点IP”的API
实际可行方案:
固定热点默认IP(最简单)
192.168.43.1
枚举本机网卡 IPv4 地址
Native层获取 NetworkInterface
推荐改为:
UDP/mDNS 自动发现设备
这是最稳定、最跨平台的局域网方案。
在HarmonyOS Next中,可通过 @ohos.net.wifi 模块的 getHotspotIpAddress() 方法获取本机热点IP地址。调用方式:import wifi from '@ohos.net.wifi'; const ip = wifi.getHotspotIpAddress(); 返回值为字符串格式的IP地址。
要获取本机热点IP,可通过系统网络管理接口实现。HarmonyOS NEXT 中,本机开启热点后,热点接口通常命名为 wlan 或类似标识,使用 @kit.NetworkKit 的 getInterfaceAddresses 可获取所有网络接口地址,筛选即可得到热点IP。
关键代码示例:
import { connection } from '@kit.NetworkKit';
import { BusinessError } from '@kit.BasicServicesKit';
// 获取本机热点IP
connection.getInterfaceAddresses((err: BusinessError, infos: connection.InterfaceAddress[]) => {
if (err) {
console.error('获取接口失败:', err.message);
return;
}
for (let info of infos) {
// 热点接口名通常以 'wlan' 打头,可根据实际调整
if (info.interfaceName.startsWith('wlan')) {
console.log('热点IP:', info.address); // 如 192.168.43.1
break;
}
}
});
所需权限:
ohos.permission.GET_NETWORK_INFOohos.permission.INTERNET
说明:
getInterfaceAddresses返回当前设备所有网络接口的信息,包含接口名和IP地址。- 若无法匹配到
wlan,可遍历打印所有接口名,确认本机热点对应的接口名称后调整判断逻辑。

