gpt4 book ai didi

Android 在托管热点时查找设备的 ip 地址

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:55:49 24 4
gpt4 key购买 nike

我需要在托管热点时找到设备的 IP 地址。到目前为止,我已经使用了这段代码:

//if is using Hotspot
for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) {
NetworkInterface intf = en.nextElement();
if (intf.getName().contains("wlan")) {
for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();) {
InetAddress inetAddress = enumIpAddr.nextElement();
if (!inetAddress.isLoopbackAddress() && (inetAddress.getAddress().length == 4)) {
return inetAddress.getHostAddress();
}
}
}
}

这工作得很好,但 wifi NetworkInterface 名称在某些设备上不同。所以我必须首先找到设备的 wifi NetworkInterface 名称(用于其热点)。我怎样才能找到这个名字?还是有更好的方法来查找设备的 ip 地址?

///通过 MAC 找到正确的 ip 地址似乎也不起作用

最佳答案

起初我试图获取WiFi接口(interface)的MAC地址,将其与每个接口(interface)的MAC地址进行比较。但事实证明,至少在我运行 CM 的 N4 上,WiFi 接口(interface)的 MAC 在打开热点时发生了变化。

所以我写了一些代码来遍历设备列表以找到一些东西来识别 wifi 接口(interface)。此代码在我的 N4 上完美运行:

private String getWifiIp() throws SocketException {
for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces();
en.hasMoreElements(); ) {
NetworkInterface intf = en.nextElement();
if (intf.isLoopback()) {
continue;
}
if (intf.isVirtual()) {
continue;
}
if (!intf.isUp()) {
continue;
}
if (intf.isPointToPoint()) {
continue;
}
if (intf.getHardwareAddress() == null) {
continue;
}
for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses();
enumIpAddr.hasMoreElements(); ) {
InetAddress inetAddress = enumIpAddr.nextElement();
if (inetAddress.getAddress().length == 4) {
return inetAddress.getHostAddress();
}
}
}
return null;
}

只有一个接口(interface)符合所有条件:wlan0

可能的其他解决方案:

遍历一些最常见的接口(interface)名称并尝试在列表中找到它们:new String[] { "wlan0", "eth0", ...];

关于Android 在托管热点时查找设备的 ip 地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21804891/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com