Android 使用InetAddress类中的getHostAddress()以编程方式获取默认网关
我想以编程方式获得Android中的默认网关。我首先找到了以下解决方案: 然后我意识到这是不赞成的。如文档所述:我们可以Android 使用InetAddress类中的getHostAddress()以编程方式获取默认网关,android,ip,tcp-ip,gateway,Android,Ip,Tcp Ip,Gateway,我想以编程方式获得Android中的默认网关。我首先找到了以下解决方案: 然后我意识到这是不赞成的。如文档所述:我们可以getHostAddress() 我还认为,这更好,因为我可能不需要像@Sandeep在他的回答中提到的那样向我的应用程序添加新权限: <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.pe
getHostAddress()
我还认为,这更好,因为我可能不需要像@Sandeep在他的回答中提到的那样向我的应用程序添加新权限:
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
此解决方案不会将默认网关返回为dhcp。为我提供的网关。但是,如何使用getHostAddress()
获得默认网关
附录:
正如下面的评论中所提到的,如果我禁用了
DHCP
?然后,DhcpInfo
将无法像我预期的那样工作。您找到了解决方案吗?我正在努力寻找一种方法来确定没有DHCP的网关。这是一个老问题,但据我记忆所及,没有解决办法。
public static String getLocalIpAddress() {
try {
for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements(); ) {
NetworkInterface intf = en.nextElement();
for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements(); ) {
InetAddress inetAddress = enumIpAddr.nextElement();
if (!inetAddress.isLoopbackAddress() && inetAddress instanceof Inet4Address) {
return inetAddress.getHostAddress();
}
}
}
} catch (SocketException ex) {
ex.printStackTrace();
}
return null;
}