Android如何从设备中查找动态IP?

时间:2010-07-28 10:23:22

标签: android networking

我有找到DHCP地址和主机地址的方法。 如何查找分配给我的设备的动态IP地址。 我可以从http://www.ip2location.com/default.aspx

获取地址

如何在设备中获取此IP?

4 个答案:

答案 0 :(得分:9)

ipString = String.format( 
    "%d.%d.%d.%d", 
    (ip & 0xff), 
    (ip >> 8 & 0xff),
    (ip >> 16 & 0xff),
    (ip >> 24 & 0xff));

答案 1 :(得分:4)

您可以使用外部服务器来请求您的IP,例如@Midday建议。这可能是最简单的解决方案。问题是您必须依赖网络和远程服务器,这可能并不总是可靠的。

你也可以直接从你的设备上获取它,但你必须通过箍来实现这一点 - 获取设备的IP地址并不像在Android上那样简单。

WifiManager wifiManager = (WifiManager) getSystemService(WIFI_SERVICE);
WifiInfo wifiInfo = wifiManager.getConnectionInfo();
int ipAddress = wifiInfo.getIpAddress();

请注意ipAddress是一个整数。

例如,如果您的IP地址是“86.52.119.245”:

  • getIpAddress返回的int将为4118230102。
  • 翻译成二进制此号码为:11110101 01110111 00110100 01010110。
  • 将每个字节转换为小数,然后获得数字:80 35 83 10
  • 请注意,这些数字是按网络顺序排列的,因此您必须将其翻转。

希望它有所帮助。

答案 2 :(得分:1)

如果您希望外部IP this website可以为您提供帮助,他们也有XML API希望这会有所帮助。如果您需要本地IP(如果使用WIFI),Android api

中应该有一些内容

答案 3 :(得分:0)

这帮助我获得了我的IPv4 IP。我从另一篇文章中得到了它,但是一些搜索结果显示了这个。

public static String getMyIp(){
    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()) {
                    if(InetAddressUtils.isIPv4Address(inetAddress.getHostAddress())) {
                        return inetAddress.getHostAddress().toString();
                    }
                }
            }
        }
    } catch (SocketException ex) {
        Log.e("NetworkSettings", "There was a socket error: " + ex.toString());
    }
    return null;
}

取自"How to get my ip address?" post并添加了IPv4检查(它为我返回了IPv6)