標籤:ddr rsh inf for 路由器 請求 end mda roi
原文:http://blog.csdn.net/suziluo123/article/details/51382410
最近接觸6.0,發現使用單純的wifiManager.getConnectionInfo().getMacAddress();
方法擷取不到MAc地址。後來Google一下發現 Google對硬體資訊的訪問,其管控更加嚴格。SD 記憶卡的讀寫,除了許可權聲明之外,還應該動態請求,否則就會被禁止。至於 MAC 網路地址的擷取,相應的 API 返回的最新結果都是 02:00:00:00:00:00
這個固定值。可以參見 Getting MAC address in Android 6.0。
按照官方解釋,這是為了更好的資料保護
,可以參見 Android 6.0 變化一文中 Access to Hardware Identifier
一節。
擷取 MAC 的傳統方法:
final WifiManager wifiManager = (WifiManager) getApplication() .getApplicationContext().getSystemService(Context.WIFI_SERVICE);final String wifiMACaddress = wifiManager.getConnectionInfo() .getMacAddress();
然而這種方法在6.0
上並不好使,那怎麼辦呢?
查詢資料找到了相應的解決方案:
使用Java擷取裝置網路裝置資訊的API——NetworkInterface.getNetworkInterfaces() ——仍然可以間接地擷取到MAC地址。
// 有興趣的朋友可以看下NetworkInterface在Android FrameWork中怎麼實現的 public static String macAddress() throws SocketException { String address = null; // 把當前機器上的訪問網路介面的存入 Enumeration集合中 Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces(); while (interfaces.hasMoreElements()) { NetworkInterface netWork = interfaces.nextElement(); // 如果存在硬體地址並可以使用給定的當前許可權訪問,則返回該硬體地址(通常是 MAC)。 byte[] by = netWork.getHardwareAddress(); if (by == null || by.length == 0) { continue; } StringBuilder builder = new StringBuilder(); for (byte b : by) { builder.append(String.format("%02X:", b)); } if (builder.length() > 0) { builder.deleteCharAt(builder.length() - 1); } String mac = builder.toString(); Log.d("mac", "interfaceName="+netWork.getName()+", mac="+mac); // 從路由器上線上裝置的MAC地址清單,可以印證裝置Wifi的 name 是 wlan0 if (netWork.getName().equals("wlan0")) { Log.d("mac", " interfaceName ="+netWork.getName()+", mac="+mac); address = mac; } } return address; }
這樣就可以正常的擷取到6.0的mac地址了!希望能協助大家
關於擷取android6.0的mac地址