当前位置: 首页 > news >正文

Android WiFi获取动态IP地址

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以保证兼容性‌

相关文章:

  • python函数的定义与使用
  • Docker Harbor
  • 连表查询的时候,子查询的条件应该写到子查询里面,不能放到外面
  • 大模型在网络安全领域的七大应用
  • qml之锚点Anchors
  • Google Cloud Next‘25大会 Gemini 支持 Anthropic MCP 协议及推出 A2A 协议剑指医疗AI情况分析
  • QBitmap、QPixmap、QImage 和 QPicture 使用方法和特点以及转换
  • Windows10 ssh无输出 sshd服务启动失败 1067报错 公钥无法认证链接 解决办法
  • Android 中绕过hwbinder 实现跨模块对audio 的HAL调用
  • Java面试黄金宝典45
  • POSIX线程(pthread)库:线程的终止与管理
  • C#异步方法返回Task<T>的同步调用
  • LLM相关代码笔记
  • 【Docker基础】容器技术详解:生命周期、命令与实战案例
  • Java网络编程实战(多人聊天室-CS模式)
  • ollama加载本地自定义模型
  • 在 Linux 系统(ubuntu/kylin)上安装 Docker
  • 玻璃厂退火炉“温度智囊”:Profinet转ModbusRTU网关
  • 目标检测YOLO实战应用案例100讲- 基于卷积神经网络的小目标检测算法研究与应用
  • 灵霄破茧:仙途启幕 - 灵霄门新篇-(4)