1. 程式人生 > >關於android裝置wifi-mac地址的獲取

關於android裝置wifi-mac地址的獲取

背景:

最近在做一個利用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地址為什麼不一樣,這個問題如果有知道的大神,請不吝賜教;

本人沒寫過部落格,如果感覺不好,請勿噴。