在网上搜索过了很多的获取手机的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,官方解释说为了保护用户隐私,所以这个现在应该被弃用了吧(话说被弃用了居然还写出来,真的是恶心)
通过NetworkInterface后去mac地址
通过网络接口获取mac地址,这种方法取代了之前的WiFimanager的方法,可以做6.0版本之后同样适用,只不过需要添加权限,另外还需要开启wifi才可以获取到mac地址(不过有些手机在wifi关闭后就获取不到mac地址了,例如华为) 在网络接口中找到wlan0,它对应的地址及为mac地址。(这里另外还有好多其他的,这里打印一个日志可以看到)
这里有一个大佬写的解释 简书:获取android手机mac地址
关闭时的日志
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;
需要以下权限
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
暂时写这么多 找到了其他的发现都没什么用 到时候再补上来