获取我的设备的wifi mac地址?

时间:2017-09-15 19:36:21

标签: java android

我想访问设备的wifi mac地址并将其发布到服务器,我使用下面的方法:

 public void accessAdress(){
    //Detect Bluetooth Address
    WifiManager wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
    WifiInfo wifiInfo = wifiManager.getConnectionInfo();
    String address = wifiInfo.getMacAddress();
    Toast.makeText(this, ""+address, Toast.LENGTH_SHORT).show();

}

但它给了我这样的东西:02:00:00:00:00:00。 我该怎么做才能访问我真正的wifi mac地址? (我的设备的Android版本是:7.0)

1 个答案:

答案 0 :(得分:0)

从Android 6.0开始,mac地址被模糊处理

  

为了向用户提供更好的数据保护,从此版本开始,Android会删除使用Wi-Fi和蓝牙API的应用程序对设备的本地硬件标识符的编程访问。 WifiInfo.getMacAddress()和BluetoothAdapter.getAddress()方法现在返回一个常量值02:00:00:00:00:00。

     

要通过蓝牙和Wi-Fi扫描访问附近外部设备的硬件标识符,您的应用现在必须具有ACCESS_FINE_LOCATION或ACCESS_COARSE_LOCATION权限。

请参阅documentation

人们已使用此work around

public static String getMacAddr() {
    try {
        List<NetworkInterface> all = Collections.list(NetworkInterface.getNetworkInterfaces());
        for (NetworkInterface nif : all) {
            if (!nif.getName().equalsIgnoreCase("wlan0")) continue;

            byte[] macBytes = nif.getHardwareAddress();
            if (macBytes == null) {
                return "";
            }

            StringBuilder res1 = new StringBuilder();
            for (byte b : macBytes) {
                res1.append(Integer.toHexString(b & 0xFF) + ":");
            }

            if (res1.length() > 0) {
                res1.deleteCharAt(res1.length() - 1);
            }
            return res1.toString();
        }
    } catch (Exception ex) {
        //handle exception
    }
    return "";
}