Android6.0系统获getMacAddress()取Mac地址返回02:00:00:00:00:00解决办法

Android6.0系统获getMacAddress()取Mac地址返回02:00:00:00:00:00解决办法

 

在做用户信息统计时,发现 安卓6.0系统用户返回的Mac地址都是02:00:00:00:00:00,被误判为作弊用户,实际上是谷歌在6.0及以后版本对获取wifi及蓝牙MacAddress 做的改动。

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.

 

也就是早先的:

 

WifiManager wifiManager=(WifiManager) getSystemService(Context.WIFI_SERVICE);
WifiInfo wifiInfo=wifiManager.getConnectionInfo();
String mac=wifiInfo.getMacAddress();


方法在安卓6.0系统上获取到的Mac 都是02:00:00:00:00:00。刚开始以为权限不够,但权限都给了之后还是获取到02:00信息,说明不是权限问题。查寻资料还可以通过获取设备网络设备信息的API—— NetworkInterface.getNetworkInterfaces() 去获取。

 

 

 

Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces();
while (interfaces.hasMoreElements()) {
    NetworkInterface iF = interfaces.nextElement();

    byte[] addr = iF.getHardwareAddress();
    if (addr == null || addr.length == 0) {
        continue;
    }

    StringBuilder buf = new StringBuilder();
    for (byte b : addr) {
        buf.append(String.format("%02X:", b));
    }
    if (buf.length() > 0) {
        buf.deleteCharAt(buf.length() - 1);
    }
    String mac = buf.toString();
    Log.d("---mac", "interfaceName="+iF.getName()+", mac="+mac);
}

 

 

用 Genymotion 虚拟机运行的6.0系统,打印如下:

---mac: interfaceName=eth0, mac=08:00:27:75:9A:98
---mac: interfaceName=eth1, mac=08:00:27:DF:43:CA
---mac: interfaceName=ifb0, mac=BE:98:32:22:9A:51
---mac: interfaceName=ifb1, mac=7A:E0:26:3E:8D:D3

 

获取一个属性的Mac 地址如下:

 

</pre></p><pre name="code" class="java">public static String getMacAddress(Context context) {
//		该方法在6.0 系统 不再开发,返回 02:00:00:00:00:00


        if (isAccessWifiStateAuthorized(context)) {
            WifiManager wifiMgr = (WifiManager) context
                    .getSystemService(Context.WIFI_SERVICE);
            WifiInfo wifiInfo = wifiMgr.getConnectionInfo();
        Log.i("----getMacAddress--0--", "" + wifiInfo.getMacAddress());
        } else {


        }


        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:02";
            }
            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:02";
        }
        Log.i("----getMacAddress--1--", "" + buf.toString());
        return mac<span style="font-family: Arial, Helvetica, sans-serif;">Address</span>;
    }

 

 

可以通过 运行各版本手机的方法 对比测试

networkInterface = NetworkInterface.getByName("wlan0"); 
来确定getByName 为哪个name 。

 

 

 

以上就是Android6.0系统获getMacAddress()取Mac地址返回02:00:00:00:00:00解决办法的全文介绍,希望对您学习mac开发和使用有所帮助.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值