隨著android的版本迭代,獲取裝置資訊的方法也可能發生改變,在android 6生效的方法,在android 8可能已經不生效了。諸如此類,獲取mac位址的方法也發生了變化。這裡找到了最新的適配方案(適配當前的最新版本android 9.0),並且記錄了整個適配的修復過程,以供參考。
1、必須的許可權 < uses-permission android:name=「android.permission.access_wifi_state」 />
2、**實現
/**
* android 6.0 之前(不包括6.0)
* @param context
* @return
*/private static string getmacdefault(context context)
.getsystemservice(context.wifi_service);
if (wifi == null)
wifiinfo info = null;
try catch (exception e)
if (info == null)
mac = info.getmacaddress();
if (!textutils.isempty(mac))
return mac;
}
android 6.0 變更:硬體識別符號訪問權。為給使用者提供更嚴格的資料保護,從此版本開始,對於使用 wlan api 和 bluetooth api 的應用,android 移除了對裝置本地硬體識別符號的程式設計訪問權。wifiinfo.getmacaddress() 方法和 bluetoothadapter.getaddress() 方法現在會返回常量值 02:00:00:00:00:00。
上面是官網說明,很顯然如果採用原有的方式獲得是預設的值 02:00:00:00:00:00。android 6可以採用讀取系統檔案的方式獲取mac位址,具體實現**如下:
/**
* android 6.0(包括) - android 7.0(不包括)
* @return
*/private static string getmacfromfile() catch (ioexception e)
return wifiaddress;
}
在android 7.0手機上發現前面的兩種方式都失效了,android 6.0的獲取方式出現異常,並且提示
/sys/class/net/wlan0/address permission denied。
很顯然,從7.0後,許可權被拒絕。從網上找到了另一種方案,通過掃瞄各個網路介面來獲取mac位址,並且這種方式在android 6.0上同樣有效。
/**
* 遍歷迴圈所有的網路介面,找到介面是 wlan0
* 必須的許可權 * @return
*/private static string getmacfromhardware()
stringbuilder res1 = new stringbuilder();
for (byte b : macbytes)
if (res1.length() > 0)
return res1.tostring();
}} catch (exception e)
return "02:00:00:00:00:00";
}
/**
* 獲取mac位址
* * @param context
* @return
*/public static string getmacaddress(context context) else if (build.version.sdk_int < build.version_codes.n) else if (build.version.sdk_int >= build.version_codes.n)
return mac;
}
Android開發之全域性獲取Context的技巧
第一行 android 高階篇 這本書對於入門來說確實很棒,很簡單明瞭的介紹了android開發中涉及到的方方面面,對我的幫助很大,同時記錄一些該書中一些對我以後開發有用的東西,以方便使用。1 public23 private static context context 45 override 6...
獲取Android的MAC位址
在android平台上,如果在開始啟動前去載入乙個測試程式,該測試程式的功能是去讀取wifi的mac位址,然後顯示出來,顯示的方式可以使用移植recovery源 的miniui。那麼讀wifi的mac位址無疑便是要初始化,裝載wifi驅動後,通過cat sys class net wlan0 add...
Mac搭建Android開發環境
android開發的除錯可以通過模擬器和真機除錯 關於真機除錯 由於mac沒有驅動這個概念 所以大多機器可以直接用usb線連線mac 從而除錯 但是,也有部分機器無法直接使用,比如小公尺 我的就是2s 華為,那是因為adb不知道這手機的usb vendor id 解決方案 echo 0x2717 a...