Android

来源:互联网 发布:mac下jenkins安装配置 编辑:程序博客网 时间:2024/05/17 23:34

1、android系统6.0之后,对mac地址的获取添加了权限,按照普通的方法获取如下:

WifiManager  wifiMan = (WifiManager)context.getSystemService(Context.WIFI_SERVICE) ;WifiInfo wifiInf = wifiMan.getConnectionInfo();return wifiInf.getMacAddress();

2、但是这种情况,获取到的mac地址都是:02:00:00:00:00:00,看来就需要另一种方法来获取mac地址:

private static final String marshmallowMacAddress = "02:00:00:00:00:00";  private static final String fileAddressMac = "/sys/class/net/wlan0/address";  public static String getAdresseMAC(Context context) {    WifiManager wifiMan = (WifiManager)context.getSystemService(Context.WIFI_SERVICE) ;    WifiInfo wifiInf = wifiMan.getConnectionInfo();    if(wifiInf !=null && marshmallowMacAddress.equals(wifiInf.getMacAddress())){      String result = null;      try {        result= getAdressMacByInterface();        if (result != null){          return result;        } else {          result = getAddressMacByFile(wifiMan);          return result;        }      } catch (IOException e) {        Log.e("MobileAccess", "Erreur lecture propriete Adresse MAC");      } catch (Exception e) {        Log.e("MobileAcces", "Erreur lecture propriete Adresse MAC ");      }    } else{      if (wifiInf != null && wifiInf.getMacAddress() != null) {        return wifiInf.getMacAddress();      } else {        return "";      }    }    return marshmallowMacAddress;  }

3、接下来,来分析一下其中两个重要的方法

1.getAdressMacByInterface()

 private static String getAdressMacByInterface(){    try {      List<NetworkInterface> all = Collections.list(NetworkInterface.getNetworkInterfaces());      for (NetworkInterface nif : all) {        if (nif.getName().equalsIgnoreCase("wlan0")) {          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) {      Log.e("MobileAcces", "Erreur lecture propriete Adresse MAC ");    }    return null;  }

2.getAddressMacByFile(wifiMan)

private static String getAddressMacByFile(WifiManager wifiMan) throws Exception {    String ret;    int wifiState = wifiMan.getWifiState();    wifiMan.setWifiEnabled(true);    File fl = new File(fileAddressMac);    FileInputStream fin = new FileInputStream(fl);    ret = crunchifyGetStringFromStream(fin);    fin.close();    boolean enabled = WifiManager.WIFI_STATE_ENABLED == wifiState;    wifiMan.setWifiEnabled(enabled);    return ret;  }

3、crunchifyGetStringFromStream(InputStream crunchifyStream)

private static String crunchifyGetStringFromStream(InputStream crunchifyStream) throws IOException {    if (crunchifyStream != null) {      Writer crunchifyWriter = new StringWriter();      char[] crunchifyBuffer = new char[2048];      try {        Reader crunchifyReader = new BufferedReader(new InputStreamReader(crunchifyStream, "UTF-8"));        int counter;        while ((counter = crunchifyReader.read(crunchifyBuffer)) != -1) {          crunchifyWriter.write(crunchifyBuffer, 0, counter);        }      } finally {        crunchifyStream.close();      }      return crunchifyWriter.toString();    } else {      return "No Contents";    }  }
原创粉丝点击