文章目录
获取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 ""
}
}