如何以编程方式获取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 地址?