Android WiFi获取动态IP地址

发布于:2025-04-11 ⋅ 阅读:(34) ⋅ 点赞:(0)

Android开发中获取WiFi动态IP地址可通过以下方法实现,需结合网络状态管理和API调用:

一、权限配置

AndroidManifest.xml中添加必要权限:

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


二、通过WifiManager获取(传统方法)

  1. 获取WifiManager实例‌:

    WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);

  2. 检查并启用WiFi‌(可选):

    if (!wifiManager.isWifiEnabled()) { wifiManager.setWifiEnabled(true); }

  3. 获取连接信息并解析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)

  1. 获取ConnectivityManager实例‌:

    ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);

  2. 获取活动网络并提取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。


四、注意事项

  1. 动态IP有效性‌:需确保设备已成功连接WiFi并完成DHCP协商,否则可能返回0.0.0.0或空值。

  2. API版本适配‌:

    • Android 10+ 弃用NetworkInfo,推荐使用NetworkCapabilitiesLinkProperties‌。
    • 低版本设备可沿用WifiManager方案‌。
  3. 空值处理‌:需检查connectivityManageractiveNetwork等对象是否为null,避免崩溃。


以上方法均适用于动态IP场景,实际开发中建议优先采用新API以保证兼容性‌


网站公告

今日签到

点亮在社区的每一天
去签到