安卓获取当前的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 ""
    }
}
相关推荐
QING618几秒前
Kotlin Flow 防抖(Debounce)详解
android·kotlin·android jetpack
QING61812 分钟前
Kotlin Flow 防抖(Debounce)、节流(Throttle)、去重(distinctUntilChanged) —— 新手指南
android·kotlin·android jetpack
盛满暮色 风止何安22 分钟前
负责均衡的理解
运维·服务器·网络·网络协议·系统安全·安全架构
AI视觉网奇35 分钟前
android yolo12 android 实战笔记
android·笔记·yolo
代码不停42 分钟前
HTTP / HTTPS详细介绍
网络协议·http·https
海上飞猪1 小时前
【Mysql】Mysql的安装部署和使用
android·mysql·adb
董世昌411 小时前
HTTP 核心:GET 与 POST 深度解析(区别、原理与实战场景)
网络·网络协议·http
小熊哥^--^1 小时前
基于TCP全双工特性,HTTP、SSE与WebSocket通信模式差异解析
websocket·网络协议·http
我是好小孩1 小时前
【Android】项目的组件化搭建
android
huangyuchi.1 小时前
【Linux 网络】基于TCP的Socket编程:通过协议定制,实现网络计算器
linux·网络·tcp/ip·linux网络·协议定制·josncpp库·序列与反序列化