最近接觸到的新項(xiàng)目需要獲取網(wǎng)關(guān)的mac信息來進(jìn)行上報(bào),遂一如既往面向百度和Google編程。無奈呀,找了好久,基本網(wǎng)上說的都是獲取自身的ip和mac的,以及獲取wifi狀態(tài)下的網(wǎng)關(guān)ip和mac,但是這不夠呀,除了自身的ip和mac,我還需要有線狀態(tài)下的ip和mac。
功夫不負(fù)有心人,最終還是被我找到了??梢允褂胊db shell命令和讀取設(shè)備保存的相關(guān)文件信息來獲取到我所需要的
/**
* 使用adb shell命令來獲取網(wǎng)關(guān)IP
* @return
*/
fun getGatewayIp(): String {
var result = ""
val order = "ip route list table 0"
try {
val exec = Runtime.getRuntime().exec(order)
val buff = BufferedReader(InputStreamReader(exec.inputStream))
val str = buff.readLine()
if (str != null) {
result = str.trim().split("\\s+".toRegex()).toTypedArray()[2]
}
buff.close()
exec.waitFor()
} catch (e: Exception) {
e.printStackTrace()
}
return result
}
/**
* 從保存相關(guān)信息的 /proc/net/arp 文件里根據(jù)ip獲取對(duì)應(yīng)的網(wǎng)關(guān)mac
* @return
*/
fun getGatewayMac(): String {
var mac = ""
try {
val filePath = "/proc/net/arp"
val buff = BufferedReader(FileReader(filePath))
while (true) {
val str = buff.readLine() ?: break
if (str.contains(getGatewayIp())) {
mac = str.trim().split("\\s+".toRegex()).toTypedArray()[3]
break
}
}
buff.close()
} catch (e: Exception) {
e.printStackTrace()
}
return mac
}
就是如何簡(jiǎn)單了,至少在我這是可行的,最后再放上原方法的鏈接https://blog.csdn.net/shaoenxiao/article/details/81285090