如何获取用户的IP地址(移动的网络或Wi-Fi)?-Android/java

nhjlsmyf  于 2023-05-27  发布在  Android
关注(0)|答案(1)|浏览(173)

在访问同一主题的多个问题后。这不是重复的问题。因为提供的所有其他代码都是旧的或不推荐使用的。
我想检查什么是用户的IP地址时启动画面显示。无论时间连接移动的数据或Wi-Fi。

方式:通过WifiManager
**问题:1)**只有当用户连接到wifi时才提供IP。2)Formatter.formatIpAddress在API版本12中已弃用。3)getHostAddress(),支持IPv4和IPv6地址。此方法不支持IPv6地址
我发现只有一个简单的解决方案,就是调用这个API,http://www.ip-api.com/json <并通过Json获取数据。

有没有其他方法可以从Android设备获取IP?

fwzugrvs

fwzugrvs1#

fun getIPAddress(): String? {
    try {
        val interfaces: List<NetworkInterface> = NetworkInterface.getNetworkInterfaces().toList()
        for (networkInterface in interfaces) {
            val addresses: List<InetAddress> = networkInterface.inetAddresses.toList()
            for (address in addresses) {
                if (!address.isLoopbackAddress && !address.isLinkLocalAddress && address.isSiteLocalAddress) {
                    return address.hostAddress
                }
            }
        }
    } catch (e: Exception) {
        e.printStackTrace()
    }
    return null
}

它会过滤掉环回、链路本地和非站点本地地址,以查找设备的IP地址。该函数返回字符串形式的IP地址,如果检索IP地址失败,则返回null。

相关问题