在網(wǎng)上搜索過了很多的獲取手機的mac地址方法 今天在這里整理一下學習到的方法~
通過wifimanager獲取mac地址
這個是官方的獲取方法 代碼如下
WifiManager mgrWifi = (WifiManager)getApplicationContext().getSystemService(Context.WIFI_SERVICE); if(null == mgrWifi)return ""; WifiInfo info = mgrWifi.getConnectionInfo(); if(null == info)return ""; String sMac = info.getMacAddress(); if(null == sMac)return ""; return sMac;
這個方法在安卓6.0之后便只能獲取到02:00:00:00:00,官方解釋說為了保護用戶隱私,所以這個現(xiàn)在應(yīng)該被棄用了吧(話說被棄用了居然還寫出來,真的是惡心)
通過NetworkInterface后去mac地址
通過網(wǎng)絡(luò)接口獲取mac地址,這種方法取代了之前的WiFimanager的方法,可以做6.0版本之后同樣適用,只不過需要添加權(quán)限,另外還需要開啟wifi才可以獲取到mac地址(不過有些手機在wifi關(guān)閉后就獲取不到mac地址了,例如華為) 在網(wǎng)絡(luò)接口中找到wlan0,它對應(yīng)的地址及為mac地址。(這里另外還有好多其他的,這里打印一個日志可以看到)
這里有一個大佬寫的解釋 簡書:獲取android手機mac地址
關(guān)閉時的日志
01-23 18:13:25.402 29573-29573/com.example.administrator.mytestapplication D/TEST_BUG: interfaceName=dummy0, mac=42:38:D5:B2:4A:FE
開啟時的日志
01-23 18:14:04.146 29573-29573/com.example.administrator.mytestapplication D/TEST_BUG: interfaceName=p2p0, mac=7A:62:56:14:09:07
01-23 18:14:04.150 29573-29573/com.example.administrator.mytestapplication D/TEST_BUG: interfaceName=dummy0, mac=42:38:D5:B2:4A:FE
01-23 18:14:04.155 29573-29573/com.example.administrator.mytestapplication D/TEST_BUG: interfaceName=wlan0, mac=78:62:56:14:09:07
下面就是代碼部分
String macAddress = null; StringBuffer buf = new StringBuffer(); NetworkInterface networkInterface = null; try { networkInterface = NetworkInterface.getByName("eth1"); if (networkInterface == null) { networkInterface = NetworkInterface.getByName("wlan0"); } if (networkInterface == null) { return "02:00:00:00:00:00"; } byte[] addr = networkInterface.getHardwareAddress(); for (byte b : addr) { buf.append(String.format("%02X:", b)); } if (buf.length() > 0) { buf.deleteCharAt(buf.length() - 1); } macAddress = buf.toString(); } catch (SocketException e) { e.printStackTrace(); return "02:00:00:00:00:00"; } return macAddress;
需要以下權(quán)限
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
暫時寫這么多 找到了其他的發(fā)現(xiàn)都沒什么用 到時候再補上來