1. 程式人生 > >獲取android一體機的Mac地址

獲取android一體機的Mac地址

引言

最近在做一個醫院專家介紹的網頁展示,說起來沒什麼難度。很簡單的一個東西,但是有一點把我噁心到了,前端給我的ip地址中需要拼接mac地址。本以為沒什麼難度,可以還是被坑了一把。

獲取Mac

本來一開始,也沒覺得是回事。無外乎就是獲取mac,照著很多人通俗的做法就是使用wifiManager這個方法。

WifiManager wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
mac = wifiManager.getConnectionInfo().getMacAddress
();

很簡單就兩句話,但是需要注意的一點是getSystemService()這個方法。在android studio2.3以後一定要在這個方法前新增getApplicationContext()這個方法,否則編譯可以成功運動,但是打包Apk的時候就會報錯。
好了接下來說一下我的問題,這個方法雖然說可以獲取到mac倒是必須是在連線wifi的前提下才可以,不然的話就會報null。然而,我這裡做的android盒子程式是要裝的盒子上的,可是這個盒子又不能連wifi。簡而言之就是隻能插網線,這下完蛋了。這個方法不能用,該怎麼辦呢?看來只能另尋出路。有句老話說,有事請Google。這裡也不說廢話了直接上程式碼。

Process ppyx = null;
        try {
            ppyx = Runtime.getRuntime().exec("cat /sys/class/net/eth0/address ");
        } catch (IOException e) {
            e.printStackTrace();
        }
        InputStreamReader ir = new InputStreamReader(ppyx.getInputStream());
        LineNumberReader input = new
LineNumberReader(ir); for (; null != str;) { try { str = input.readLine(); } catch (IOException e) { e.printStackTrace(); } if (str != null) { mac = str.trim();// 去空格 break; } }

通過上面的方法就可以完美的解決我的問題了。這個方法是獲取系統的檔案下面有個檔案裡的儲存的mac地址,其中的/sys/class/net/eth0/address是預設路徑(不同的機器可能會不同,可以從目前的情況來看,並沒有什麼不同)。很簡單的幾句話,也沒什麼好解釋的。(還有此方法獲取的mac和wifi獲取的mac是不一樣的,因為這是兩個mac,希望大家不要糾結為什麼這兩個mac不一樣)

總結

再簡單的東西,也不能輕視。最後坑的只能是自己……