使用Java在Android项目中获取计算机的IP地址

6
我正在使用ksoap2-android,我需要使用Java获取IP地址,以便我不必每次手动输入。

我的意思是IP地址,例如,如果我使用命令提示符执行ipconfig
连接特定的 DNS 后缀 . :
链路本地 IPv6 地址. . . . . . . : f0::ed2:e3bf:8206:44%13
IPv4 地址 . . . . . . . . . . . : 192.168.1.107 <--这个
子网掩码 . . . . . . . . . . . : 255.255.255.0
默认网关 . . . . . . . . . . . : 192.168.1.1

问题在于我正在开发一个Android应用程序,模拟器拥有不同于机器的IP类型。
我需要获取机器的IP,这应该如何完成?

非常感谢!

4个回答

8
public 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()) {
                        return inetAddress.getHostAddress().toString();
                    }
                }
            }
        } catch (SocketException ex) {
            Log.e(tag, ex.toString());
        }
        return "";
    }

虽然这个方法可以工作,但我得到了一些错误的结果,所以我不得不使用正则表达式验证IP地址格式,在我的所有用例中都能够工作。 - broschb
1
我尝试过这种方法,并在网络上发现了相同的方法,但我不相信这会起作用。 只有一个网络连接(不是Wi-Fi),我获得了两个接口。 其中一个是回环,另一个是rmnet0,我已经了解到它是网络接口。 使用此代码,我将rmnet0作为我的本地IP获取。 但是,当我设置一个网页来输出我的IP时,从基于请求头的浏览器击中时,IP有很大的不同,并且与我在浏览器中访问“我的IP是什么”的任何网站看到的一样。 有什么想法吗? - Rich

4
要获取Android设备的IP地址,您可以使用以下代码。
WifiManager wifiManager = (WifiManager) getSystemService(WIFI_SERVICE);
WifiInfo wifiInfo = wifiManager.getConnectionInfo();
int ipAddress = wifiInfo.getIpAddress();
String ip = intToIp(ipAddress);

public String intToIp(int i) {

   return ((i >> 24 ) & 0xFF ) + "." +
               ((i >> 16 ) & 0xFF) + "." +
               ((i >> 8 ) & 0xFF) + "." +
               ( i & 0xFF) ;
}

如果他们没有启用WiFi,只有3G呢? - Matt Huggins
@Matt 我不确定,但是3G连接提供IP地址吗? - asgs
是的,他们会,我只是想知道这段代码是否仍然有效,仅此而已。 :) - Matt Huggins
嘿,这段代码对我来说确实有效... 但是返回的字符串顺序不正确。 - BamsBamx

2
InetAddress iA=InetAddress.getLocalHost();
System.out.println(iA.getHostAddress());

参见


嘿,@JigarJoshi,这个客户端连接的服务器的IP地址怎么样? - gumuruh

2

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