安卓获取当前的IP地址

文章目录

获取IP地址

在安卓中,我们使用静态方法NetworkInterface.getNetworkInterfaces() 来获取当前设备上所有的网络接口。

网络接口是指设备上用于进行网络通信的硬件或软件。这些接口可以是物理接口(如以太网接口、无线网卡等),也可以是虚拟接口(如VPN连接、回环接口等)。

调用 NetworkInterface.getNetworkInterfaces() 方法会返回一个枚举对象,该对象包含了当前设备上所有的网络接口。通过迭代该对象,可以获取到每个网络接口的详细信息,如接口名称、MAC地址等。对于每个网络接口,可以进一步获取它的IP地址。

我们可以使用while 循环,遍历每个网络接口及其对应的IP地址。通过 interfaces.hasMoreElements()方法 判断是否还有下一个网络接口,通过 addresses.hasMoreElements()方法判断是否还有下一个IP地址。

然后对于每个IP地址,通过 address.isLoopbackAddress 判断是否是回环地址,通过 address.isSiteLocalAddress 判断是否是本地地址,如果符合条件,则返回该IP地址(即当前设备的IP地址)。

使用前,我们需要导入NetworkInterface所在的包。

kotlin 复制代码
import java.net.NetworkInterface

代码如下:

kotlin 复制代码
val interfaces = NetworkInterface.getNetworkInterfaces()
while (interfaces.hasMoreElements()) {
    val networkInterface = interfaces.nextElement()
    val addresses = networkInterface.inetAddresses
    while (addresses.hasMoreElements()) {
        val address = addresses.nextElement()
        if (!address.isLoopbackAddress && address.isSiteLocalAddress) {
            return address.hostAddress
        }
    }
}

完整示例代码

kotlin 复制代码
import android.os.Bundle
import android.util.Log
import androidx.appcompat.app.AppCompatActivity
import java.net.NetworkInterface

class MainActivity : AppCompatActivity() {
    private val tag = "MyTest"
    private val port = 8888

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        // 获取ip
        val ipAddress = getIPAddress()
        Log.d(tag,"当前IP地址是:$ipAddress")
    }

    private fun getIPAddress(): String {
        val interfaces = NetworkInterface.getNetworkInterfaces()
        while (interfaces.hasMoreElements()) {
            val networkInterface = interfaces.nextElement()
            val addresses = networkInterface.inetAddresses
            while (addresses.hasMoreElements()) {
                val address = addresses.nextElement()
                if (!address.isLoopbackAddress && address.isSiteLocalAddress) {
                    return address.hostAddress
                }
            }
        }
        return ""
    }
}
相关推荐
Mintopia23 分钟前
🚀 HTTP/2 多路复用技术全透视
网络协议·http·https
nvd111 小时前
从 SSE 到 Streamable HTTP:MCP Server 的现代化改造之旅
网络·网络协议·http
小蜗的房子1 小时前
Oracle 19C RAC Public IP单网卡改为bond模式操作指南
运维·网络·数据库·sql·tcp/ip·oracle·oracle rac
消失的旧时光-19431 小时前
Android 接入 Flutter(Add-to-App)最小闭环:10 分钟跑起第一个混合页面
android·flutter
城东米粉儿2 小时前
android StrictMode 笔记
android
Zender Han2 小时前
Flutter Android 启动页 & App 图标替换(不使用任何插件的完整实践)
android·flutter·ios
童无极2 小时前
Android 弹幕君APP开发实战01
android
赛恩斯2 小时前
kotlin 为什么可以在没有kotlin 环境的安卓系统上运行的
android·开发语言·kotlin
于山巅相见2 小时前
【3588】Android动态隐藏导航栏
android·导航栏·状态栏·android11
乡野码圣2 小时前
【RK3588 Android12】开发效率提升技巧
android·嵌入式硬件