關於獲取安卓設備的mac地址


今日發現一個問題,系統要求從設備上獲取一個唯一碼作為當前登錄用戶的唯一標識;

之前嘗試過很多方法,最后決定采用mac地址。

官方獲取mac地址的方法是:

public static String getWifiMac(Context ctx) {
        WifiManager wifi = (WifiManager) ctx.getSystemService(Context.WIFI_SERVICE);
        WifiInfo info = wifi.getConnectionInfo();
        String str = info.getMacAddress();
        if (str == null) str = "";
        return str;
    }

但是最后發現,某些設備上(比如樂視2手機,谷歌的Nexus9 pad),用這種方式獲取的mac地址都是02:00:00:00:00:00 .

並不能起到唯一標識的作用。

后來發現,Android的內核是linux,那么應該可以通過shell命令的方式來獲取。

代碼如下:

/**
     * 這是使用adb shell命令來獲取mac地址的方式
     * @return
     */
    public static String getMac() {
        String macSerial = null;
        String str = "";

        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 (IOException ex) {
            // 賦予默認值
            ex.printStackTrace();
        }
        return macSerial;
    }

  解決上述兩種設備上mac地址獲取錯誤的問題。

     可見,就算是谷歌官方給出的解決方案也未必可靠,要根據實際情況酌情考慮使用。

  另外,嘗試了一下在4G網絡下獲取mac地址,結果是null。說明 4G網絡下不會有mac地址這一說,因為根本獲取不到。3G網也應該類似(沒做試驗)。

  但是有些設備,運行shell命令會報錯:權限被拒絕。(Nexus 9 pad親測,這個方法不靈);這就很尷尬了。。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM