獲取WiFi MAC地址總結【轉】


本文轉載自:http://blog.csdn.net/crazyman2010/article/details/50464256

今天對MAC地址的獲取做了一些學習,目前網上獲取MAC地址的方法主要如下: 
- 使用busybox ifconfig 
- 使用cat /sys/class/net/wlan0/address 
- 使用WifiInfo.getMacAddress 
- 使用NetworkInterface.getHardwareAddress

在飛行模式下,基本所有方法都不可用。

BusyBox ifconfig

並不是所有的機器都裝了busybox,所以,使用busybox的兼容性比較差。這個可以使用android終端命令netcfg來代替(最后一列就是MAC地址): 
這里寫圖片描述

cat /sys/class/net/wlan0/address

這種方法是通過讀取網卡驅動提供的MAC地址信息,一般比較可靠,但是同busybox ifconfig或netcfg一樣,需要手動解析返回的字符串。

WifiInfo.getMacAddress

WifiManager wifiManager=(WifiManager) getSystemService(Context.WIFI_SERVICE);
WifiInfo wifiInfo=wifiManager.getConnectionInfo();
String mac=wifiInfo.getMacAddress();
  • 1
  • 2
  • 3
  • 4

這種方法比較通用,原來一直用這個,但是最近發現,在Android 6.0系統上,這個方法失效了,返回了”02:00:00:00:00:00”的常量,網上有人說是權限問題,但是已經把所有權限都打開了,還是返回這個值,可能是一個bug,或許在將來這個問題會被修復。

網友提示后,發現這並不是一個BUG,在google的博客中找到如下一段話:

Most notably, Local WiFi and Bluetooth MAC addresses are no longer available. The getMacAddress() method of a WifiInfo object and the BluetoothAdapter.getDefaultAdapter().getAddress() method will both return 02:00:00:00:00:00 from now on.

NetworkInterface.getHardwareAddress

這個是我目前使用的方法,其原理和cat /sys/class/net/wlan0/address是一模一樣的,但是這個是上層API,不需要自己處理底層數據。在Android 6.0上測試通過。

networkInterface = NetworkInterface.getByName("wlan0");
return ConvertMacAddressBytesToString(networkInterface.getHardwareAddress());


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM