網上搜索到的大部分結果都是:html
EthernetManager mEthManager =context.getSystemService("ethernet");linux
EthernetDevInfo mEthInfo =mEthManager.getSavedEthConfig();android
Log.i(TAG, "mEthInfo == null : " + (mEthInfo == null));shell
if (mEthInfo != null) {網絡
String ipAddress = mEthInfo.getIpAddress();.net
String netMask = mEthInfo.getNetMask();code
String dns = mEthInfo.getDnsAddr();htm
String gateWay = mEthInfo.getRouteAddr();blog
可是EthernetManager和EthernetDevInfo都是android隱藏的API,我曾嘗試過經過反射去獲取EthernetManager實例,可是也拿不到「getSavedEthConfig「這個方法,多是我確實沒移植代碼進去,暫時放棄了這種辦法(找不到源碼。。。)dns
仍是從adb shell命令入手,而後我找到了這個指令:
getprop | grep eth0
可是getprop是從各類配置文件中讀取信息,並不適合於全部機頂盒,此路不通。。。
最後我找到了ip rout 命令,直接從路由表中獲取信息,這應該適用於全部設備了吧。
直接執行ip rout 命令,無線網絡狀態下,能獲取到默認網關,這個平常操做沒問題,當鏈接到無線網絡時就尷尬了,返回:
192.168.2.0/24 dev eth0 proto kernel scope link src 192.168.2.248
閹割掉了默認網關等重要信息。。。
糾結了好久。。。
而後去看路由表的知識吧,路由表的知識借鑑(感謝這篇文章做者):
http://www.mamicode.com/info-detail-1412618.html
linux 系統中,能夠自定義從 1-252個路由表,其中,linux系統維護了4個路由表:
· 0#表:系統保留表
· 253#表: defulte table 沒特別指定的默認路由都放在改表
· 254#表: main table 沒指明路由表的全部路由放在該表
· 255#表: locale table 保存本地接口地址,廣播地址、NAT地址由系統維護,用戶不得更改
(直接copy)
總而言之:我直接從系統保留表中獲取到了我想要的信息,有線下的默認網關,具體大家須要DNS啊什麼的或者須要去修改信息的本身去的找吧,總能找到的哈哈。
附上查看系統保留表的命令和效果截圖:ip route list table 0
從返回裏截取一下就好了。
至於怎麼執行adb shell之類的基礎操做就不放上來了,須要的底下再私聊我吧。
打完手工!
———————————————— 版權聲明:本文爲CSDN博主「EnvyChen」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處連接及本聲明。 原文連接:https://blog.csdn.net/EnvyChen/article/details/79425409