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"; } }
阅读全文
0 0
- Android
- android
- Android
- android
- android
- Android
- Android
- android
- android
- android
- Android
- Android
- android!!!
- android
- android
- android
- android
- android:
- 1119数组 二维数组 字符串处理函数 值传递和变量存储类型知识点
- HTML里如何移动图片位置
- GBK与UTF各种格式转码成unicode(java代码)
- bzoj1863 [Zjoi2006]trouble 皇帝的烦恼
- dubbo总结(2)——dubbo的使用场景
- Android
- 1119相应代码 包含素数 闰年 测地址 输入字符串 打印图形和二维数组等
- 转载:WebSocket使用教程-带完整实例
- 找出数列中个数大于总数一半的元素
- 杂七杂八
- Educational Codeforces Round 31- D. Boxes And Balls
- Git 常用命令清单
- 链表
- 指针2