關於擷取android6.0的mac地址

來源:互聯網
上載者:User

標籤: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地址

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.