安卓获取当前的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 ""
    }
}
相关推荐
积跬步DEV5 小时前
Android 获取签名 keystore 的 SHA1和MD5值
android
陈旭金-小金子8 小时前
发现 Kotlin MultiPlatform 的一点小变化
android·开发语言·kotlin
小疆智控9 小时前
从离散控制到集成管理:Modbus TCP转CANopen网关重构烟丝膨胀生产线
网络协议·tcp/ip·重构
二流小码农10 小时前
鸿蒙开发:DevEcoStudio中的代码提取
android·ios·harmonyos
创小匠10 小时前
创客匠人:AI重构知识IP定位与变现效率新范式
人工智能·tcp/ip·重构
laocooon52385788610 小时前
基于Python的TCP应用案例,包含**服务器端**和**客户端**的完整代码
网络·python·tcp/ip
江湖有缘10 小时前
使用obsutil工具在OBS上完成基本的数据存取【玩转华为云】
android·java·华为云
移动开发者1号11 小时前
Android 多 BaseUrl 动态切换策略(结合 ServiceManager 实现)
android·kotlin
移动开发者1号11 小时前
Kotlin实现文件上传进度监听:RequestBody封装详解
android·kotlin
沐森12 小时前
基于Fetch的post sse实现
网络协议