Android开发中获取WiFi动态IP地址可通过以下方法实现,需结合网络状态管理和API调用:
一、权限配置
在AndroidManifest.xml
中添加必要权限:
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.INTERNET" />
二、通过WifiManager获取(传统方法)
获取WifiManager实例:
WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
检查并启用WiFi(可选):
if (!wifiManager.isWifiEnabled()) { wifiManager.setWifiEnabled(true); }
获取连接信息并解析IP地址:
WifiInfo wifiInfo = wifiManager.getConnectionInfo(); int ipAddress = wifiInfo.getIpAddress(); String ip = String.format("%d.%d.%d.%d", (ipAddress & 0xff), (ipAddress >> 8 & 0xff), (ipAddress >> 16 & 0xff), (ipAddress >> 24 & 0xff));
该方法通过
WifiInfo
直接获取当前连接的IP地址68。
三、通过ConnectivityManager和NetworkCapabilities(推荐新API)
获取ConnectivityManager实例:
ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
获取活动网络并提取IP地址:
Network activeNetwork = connectivityManager.getActiveNetwork(); if (activeNetwork != null) { LinkProperties linkProperties = connectivityManager.getLinkProperties(activeNetwork); List<InetAddress> addresses = linkProperties.getLinkAddresses().stream() .map(LinkAddress::getAddress) .collect(Collectors.toList()); // 提取IPv4地址(过滤IPv6) for (InetAddress address : addresses) { if (address instanceof Inet4Address) { String ip = address.getHostAddress(); break; } } }
此方法通过
LinkProperties
获取更详细的网络属性,兼容Android 9及以上版本17。
四、注意事项
动态IP有效性:需确保设备已成功连接WiFi并完成DHCP协商,否则可能返回
0.0.0.0
或空值。API版本适配:
- Android 10+ 弃用
NetworkInfo
,推荐使用NetworkCapabilities
和LinkProperties
。 - 低版本设备可沿用
WifiManager
方案。
- Android 10+ 弃用
空值处理:需检查
connectivityManager
、activeNetwork
等对象是否为null
,避免崩溃。
以上方法均适用于动态IP场景,实际开发中建议优先采用新API以保证兼容性