如何以编程方式获取android手机的IP地址......? [复制]

Posted

技术标签:

【中文标题】如何以编程方式获取android手机的IP地址......? [复制]【英文标题】:How to get the ip address of an android mobile programatically ....? [duplicate] 【发布时间】:2014-12-11 16:35:20 【问题描述】:

我想要通过 wifi 连接到网络的 android 设备的确切 IP 地址! 谁能帮我在手机连接到网络时如何获取IP地址以及如何通过编程方式获取地址..

【问题讨论】:

【参考方案1】:

我用过,效果很好!

WifiManager wm = (WifiManager) getSystemService(WIFI_SERVICE);
String ip = Formatter.formatIpAddress(wm.getConnectionInfo().getIpAddress());

清单文件中的以下权限。

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>

【讨论】:

非常感谢您的回答它的作品...! 这与重复帖子的答案相同。 警告,此方法已弃用,不支持 IPv6 地址 获取ip地址@matdev的最新方法是什么 这是我使用的方法@natsumiyu:***.com/a/54417079/2068732【参考方案2】:

您可以使用此方法获取设备的 IP 地址,对于 IPv4 为 true,对于 IPv6 为 false

 public static String getIPAddress(boolean useIPv4) 
    try 
        List<NetworkInterface> interfaces = Collections.list(NetworkInterface.getNetworkInterfaces());
        for (NetworkInterface intf : interfaces) 
            List<InetAddress> addrs = Collections.list(intf.getInetAddresses());
            for (InetAddress addr : addrs) 
                if (!addr.isLoopbackAddress()) 
                    String sAddr = addr.getHostAddress();
                    //boolean isIPv4 = InetAddressUtils.isIPv4Address(sAddr);
                    boolean isIPv4 = sAddr.indexOf(':')<0;

                    if (useIPv4) 
                        if (isIPv4) 
                            return sAddr;
                     else 
                        if (!isIPv4) 
                            int delim = sAddr.indexOf('%'); // drop ip6 zone suffix
                            return delim<0 ? sAddr.toUpperCase() : sAddr.substring(0, delim).toUpperCase();
                        
                    
                
            
        
     catch (Exception ex)   // for now eat exceptions
    return "";

感谢How to get IP address of the device?

【讨论】:

但是它返回它找到的第一个地址,对于 ipv4 它很好,因为只有一个,但是对于基于 ipv6 的地址有多个,所以我如何确保它返回的第一个地址是正确的 ipv6 地址

以上是关于如何以编程方式获取android手机的IP地址......? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何在同一网络上以编程方式获取其他支持Wifi的设备的IP地址?

如何以编程方式通过 Wifi 获取连接在同一网络上的其他设备的 IP 地址?

如何在 Android 上以编程方式从 Mac 地址获取 IP 地址?

以编程方式在Android中的外部IP地址

如何以编程方式查找设备的公共 IP 地址? [复制]

以编程方式获取 Android 手机型号,如何在 android 中以编程方式获取设备名称和型号?