Android開發之獲取Mac位址的相容方法

2021-09-24 22:54:01 字數 2024 閱讀 9993

隨著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...