關於android裝置wifi-mac地址的獲取
阿新 • • 發佈:2019-01-01
背景:
最近在做一個利用wifi-p2p傳輸檔案的app,使用掃描二維碼的方式建立wifi-p2p連線,具體步驟如下:
1、A裝置用自身的mac地址生成二維碼;
2、B裝置掃描上面A裝置的二維碼,得到需要連線的A裝置的mac地址;
3、B裝置搜尋周圍可連線裝置,如果某個裝置的mac地址與上面得到的A的mac地址一致,則向該裝置請求連線。
之後便是app的一系列的其它流程,與本文無關,這裡不贅述。
問題:
然而事實並不像預期的那麼順利,獲取A裝置自身mac地址時,我使用了讀取如下檔案的方式:
"cat /sys/class/net/wlan0/address "
這樣獲取到A裝置自身的mac地址和進入手機“設定”->“wifi”中看到的mac地址是一樣的,結果都是:78:02:f8:2d:4b:ca
但是問題出來了,當我通過B裝置掃描周圍裝置獲取到A裝置的WifiP2pDevice物件,然後用WifiP2pDevice.deviceAddress獲取到的A的mac地址卻是:78:02:f8:2d:4b:c9,我去,這個結果和前面A自己讀取的不一樣啊,這樣一來,掃描二維碼後就一直匹配不到正確的二維碼,就無法建立連線了。
解決:
修改A獲取自身mac地址的方式為通過系統廣播獲取:
case WifiP2pManager.WIFI_P2P_THIS_DEVICE_CHANGED_ACTION: WifiP2pDevice thisDevice = intent.getParcelableExtra(WifiP2pManager.EXTRA_WIFI_P2P_DEVICE); String selfMac = thisDevice.deviceAddress;
註冊“WifiP2pManager.WIFI_P2P_THIS_DEVICE_CHANGED_ACTION”的廣播後便可以通過上面的程式碼獲取裝置自身的mac地址,這個mac地址是:78:02:f8:2d:4b:c9,可以正確與掃描到的二維碼匹配。
注:
關於A裝置自身的mac地址與它向其它裝置暴露的mac地址為什麼不一樣,這個問題如果有知道的大神,請不吝賜教;
本人沒寫過部落格,如果感覺不好,請勿噴。