美文网首页
android获取mac地址

android获取mac地址

作者: 青色石头ing | 来源:发表于2019-02-14 14:18 被阅读2次

获取mac地址分为三段

1.Android 6.0 之前(不包括6.0)

2.Android 6.0(包括) - Android 7.0(不包括)

3.Android7.0(包括)之后

获取方法

/**

* Android  6.0 之前(不包括6.0)

* 必须的权限 

* @param context

* @return

*/

private static StringgetMacDefault(Context context) {

String mac ="02:00:00:00:00:00";

  if (context ==null) {

return mac;

  }

WifiManager wifi = (WifiManager) context.getApplicationContext()

.getSystemService(Context.WIFI_SERVICE);

  if (wifi ==null) {

return mac;

  }

WifiInfo info =null;

  try {

info = wifi.getConnectionInfo();

  }catch (Exception e) {

}

if (info ==null) {

return null;

  }

mac = info.getMacAddress();

  if (!TextUtils.isEmpty(mac)) {

mac = mac.toUpperCase(Locale.ENGLISH);

  }

return mac;

}

/**

* Android 6.0(包括) - Android 7.0(不包括)

* @return

*/

private static StringgetMacFromFile() {

String str ="";

  String macSerial ="";

  try {

Process pp = Runtime.getRuntime().exec(

"cat /sys/class/net/wlan0/address");

      InputStreamReader ir =new InputStreamReader(pp.getInputStream());

      LineNumberReader input =new LineNumberReader(ir);

      for (; null != str; ) {

str = input.readLine();

        if (str !=null) {

macSerial = str.trim();// 去空格

            break;

        }

}

}catch (Exception ex) {

ex.printStackTrace();

  }

if (macSerial ==null ||"".equals(macSerial)) {

try {

return loadFileAsString("/sys/class/net/eth0/address")

.toUpperCase().substring(0, 17);

      }catch (Exception e) {

e.printStackTrace();

      }

}

return macSerial;

}

private static StringloadFileAsString(String fileName)throws Exception {

FileReader reader =new FileReader(fileName);

  String text =loadReaderAsString(reader);

  reader.close();

  return text;

}

private static StringloadReaderAsString(Reader reader)throws Exception {

StringBuilder builder =new StringBuilder();

  char[] buffer =new char[4096];

  int readLength = reader.read(buffer);

  while (readLength >=0) {

builder.append(buffer, 0, readLength);

      readLength = reader.read(buffer);

  }

return builder.toString();

}

/**7.0之后

* 遍历循环所有的网络接口,找到接口是 wlan0

* 必须的权限

* @return

*/

private static StringgetMacFromHardware() {

try {

List 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(String.format("%02X:", b));

        }

if (res1.length() >0) {

res1.deleteCharAt(res1.length() -1);

        }

return res1.toString();

      }

}catch (Exception e) {

e.printStackTrace();

  }

return "02:00:00:00:00:00";

}

调用方法

/**

* 获取mac地址

*

* @return

*/

private static StringgetMacAddress(Context context) {

String mac ="02:00:00:00:00:00";

  if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {

mac =getMacDefault(context);

  }else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && Build.VERSION.SDK_INT < Build.VERSION_CODES.N) {

mac =getMacFromFile();

  }else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {

mac =getMacFromHardware();

  }

return mac;

}

相关文章

  • Android 版本兼容 — Android 6.0 和 7.0

    Android 6.0 和 7.0后获取Mac地址 随着Android的版本迭代,获取设备的Mac地址也发生了改变...

  • Android 6.0 蓝牙Mac地址获取

    Android 6.0以后获取到的Mac地址都是常量:02:00:00:00:00:00 蓝牙Mac地址获取 Wi...

  • Android 获取mac地址

    由于项目开发需要获取设备的mac地址,因此查阅了Android获取mac地址相关信息,本篇博客转载自《Androi...

  • Android 获取MAC地址

    获取MAC地址的方法主要有如下四种方式1、使用busybox ifconfig2、使用cat /sys/class...

  • android获取mac地址

    获取mac地址分为三段 1.Android 6.0 之前(不包括6.0) 2.Android 6.0(包括) -...

  • Android Mac地址

    android系统6.0之后,对mac地址的获取添加了权限,按照普通的方法获取如下: 但是这种情况,获取到的mac...

  • 获取android手机mac地址

    android系统6.0之后,对mac地址的获取添加了权限,按照普通的方法获取如下: 但是这种情况,获取到的mac...

  • android 获取mac

    android 获取mac地址 这个方法Android 7.0是获取不到的,返回的是null,其实是返回“02:0...

  • 获取设备唯一ID

    官方博客获取mac地址各种ID获取唯一性ID,各种ID的意义与限制 一.android_id ANDROID_ID...

  • android 获取蓝牙Mac地址

    android 从6.0开始,通过BluetoothAdapter.getDefaultAdapter().get...

网友评论

      本文标题:android获取mac地址

      本文链接:https://www.haomeiwen.com/subject/spdeeqtx.html