安卓获取当前的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 ""
    }
}
相关推荐
幸运之旅几秒前
ARouter 基本原理
android·架构
沐怡旸14 分钟前
【底层机制】Handler/Looper 实现线程切换的技术细节
android·面试
conkl15 分钟前
Linux IP 网络配置与管理详解
linux·网络·tcp/ip
lijunjun27 分钟前
当ubuntu 系统的IP地址修改之后,gitlab服务应该如何修改?
tcp/ip·ubuntu·gitlab
轻口味44 分钟前
Rokid Glasses 移动端控制应用开发初体验-助力业务创新
android·操作系统·app
帅得不敢出门2 小时前
Android监听第三方播放获取音乐信息及包名
android·java
2503_928411562 小时前
10.9 鸿蒙创建和运行项目
android·华为·harmonyos
卓码软件测评2 小时前
【第三方网站代码登记测试_HTTP头语法代码详解】
网络·网络协议·http·架构·web
奇树谦2 小时前
Fast DDS 默认传输机制详解:共享内存与 UDP 的智能选择
网络·网络协议·udp·fastdds
wuxuanok11 小时前
WebSocket —— 在线聊天室
网络·websocket·网络协议