获取Android的IP地址和MAC地址
必须声明的是,本文是针对的是较新的安卓API ( Android 7.0以上 ) ,kotlin作为开发语言。
前言
在安卓开发 ( 尤其是针对较新的安卓API ) 时,我们可能会有获取机器的IP和MAC的需求。特地记录于此,以供参考使用。
一、获取权限?
在获取过程中首要且必须的步骤就是获取权限,这里需要两个权限:
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
那么应该如何获取呢,我们需要修改项目中 AndroidManifest.xml 这个文件,借用安卓开发者文档的例子:
将例子中 uses-permission 这一行替换成上述两个权限就可以了。
二、具体获取方法?
1.引入库
导入库的代码如下:
import java.net.InetAddress
import java.net.NetworkInterface
import java.net.SocketException
import java.util.*
2.获取IP地址
代码如下:
fun getIpAddress(): String? {
try {
val en: Enumeration<NetworkInterface> = NetworkInterface.getNetworkInterfaces()
while (en.hasMoreElements()) {
val nwInterface: NetworkInterface = en.nextElement()
val enumIpAdder: Enumeration<InetAddress> = nwInterface.inetAddresses
while (enumIpAdder.hasMoreElements()) {
val netAddress: InetAddress = enumIpAdder.nextElement()
if (!netAddress.isLoopbackAddress && !netAddress.isLinkLocalAddress) {
return netAddress.hostAddress.toString()
}
}
}
} catch (e: SocketException) {
e.printStackTrace()
}
return null
}
3.获取MAC地址
代码如下:
fun getMacAddress(): String? {
try {
val all: List<NetworkInterface> = Collections.list(NetworkInterface.getNetworkInterfaces())
for (nif in all) {
if (nif.name != "wlan0") {
continue
}
val macBytes: ByteArray = nif.hardwareAddress ?: return ""
val res1 = StringBuilder()
for (b in macBytes) {
res1.append(String.format("%02X:", b))
}
if (res1.isNotEmpty()) {
res1.deleteCharAt(res1.length - 1)
}
return res1.toString()
}
} catch (e: Exception) {
e.printStackTrace()
}
return null
}
将以上两个函数放入模块中,正常调用即可获得相应地址。
正文完结。
引用
该篇博客借鉴于以下两篇:
于此感谢前人的无私奉献。