如何在安卓程序中编程获取已连接的WiFi路由器的IP地址?

9

我想获取我安卓手机所连接的wifi路由器的IP地址。我知道我们可以使用安卓API获取Mac/BSSID和SSID,但我找不到获取其IP地址的方法?

我找到了获取手机所拥有的wifi路由器IP地址的代码。

WifiManager myWifiManager = (WifiManager) getSystemService(WIFI_SERVICE);
WifiInfo myWifiInfo = myWifiManager.getConnectionInfo();
int ipAddress = myWifiInfo.getIpAddress();
System.out.println("WiFi address is " + android.text.format.Formatter.formatIpAddress(ipAddress))

但是我没有得到想要的东西


尝试这个解决方案。https://dev59.com/l2025IYBdhLWcg3wVkif#6071963 - pixelscreen
你使用给定的代码得到了什么?你想得到什么? - mostar
你添加了权限吗?我相信你的代码没有问题。 - Klaudo
@paritybit 我想获取路由器的IP地址,以便我可以连接到与同一路由器连接的其他安卓手机。 - akshay1728
@klaudo 我只是想要一个启动它的方法...我想要一个为它编写代码的方法.. - akshay1728
2
@Dya兄弟,这将给出Android设备的IP地址...我想要它连接的路由器的IP地址。 - akshay1728
2个回答

13

你可能想要的是 DhcpInfo

final WifiManager manager = (WifiManager) super.getSystemService(WIFI_SERVICE);
final DhcpInfo dhcp = manager.getDhcpInfo();
final String address = Formatter.formatIpAddress(dhcp.gateway);

这将产生(格式化的)网关IP地址,这应该是您要查找的内容。


这是一个非常简单的解决方案,而且主要目标是它能够正常工作。但不幸的是,它不支持IPv6。 - Dimon
1
它正在给我本地IP地址。 - Tushar Monirul

4

由于 formatIpAddress 已弃用,这里是替代方法:

public String getHotspotAdress(){
    final WifiManager manager = (WifiManager)super.getSystemService(WIFI_SERVICE);
    final DhcpInfo dhcp = manager.getDhcpInfo();
    int ipAddress = dhcp.gateway;
    ipAddress = (ByteOrder.nativeOrder().equals(ByteOrder.LITTLE_ENDIAN)) ?
            Integer.reverseBytes(ipAddress) : ipAddress;
    byte[] ipAddressByte = BigInteger.valueOf(ipAddress).toByteArray();
    try {
        InetAddress myAddr = InetAddress.getByAddress(ipAddressByte);
        return myAddr.getHostAddress();
    } catch (UnknownHostException e) {
        // TODO Auto-generated catch block
        Log.e("Wifi Class", "Error getting Hotspot IP address ", e);
    }
    return "null"
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接