Android 使用InetAddress类中的getHostAddress()以编程方式获取默认网关

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

我想以编程方式获得Android中的默认网关。我首先找到了以下解决方案:

然后我意识到这是不赞成的。如文档所述:我们可以
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;
    }