簡體   English   中英

安卓6.0及以上Mac地址顯示為空

[英]Mac address for android 6.0 and above shows null

我正在使用此代碼獲取 MAC 地址並將其顯示在我的應用程序中。 該代碼適用於除最新設備和 ANDROID BOX 之外的所有設備。

對於 ANDROID BOX 和其他最新設備,它顯示為 null。

這是代碼:

   public static String getWifiMacAddress() {
    try {
        String interfaceName = "wlan0";
        List<NetworkInterface> interfaces = Collections.list(NetworkInterface.getNetworkInterfaces());
        for (NetworkInterface intf : interfaces) {
            if (!intf.getName().equalsIgnoreCase(interfaceName)){
                continue;
            }

            byte[] mac = intf.getHardwareAddress();
            if (mac==null){
                return "";
            }

            StringBuilder buf = new StringBuilder();
            for (byte aMac : mac) {
                buf.append(String.format("%02X:", aMac));
            }
            if (buf.length()>0) {
                buf.deleteCharAt(buf.length() - 1);
            }
            return buf.toString();
        }
    } catch (Exception ex) { } // for now eat exceptions
    return "";
}

我已經在清單文件中寫入了這些權限

 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
 <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
  <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>

首先你會檢查許可是否被授予?

WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
WifiInfo wInfo = wifiManager.getConnectionInfo();
 String macAddress = wInfo.getMacAddress();

另外,在清單文件中添加以下權限

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>

請參閱此鏈接以獲取 6.0 棉花糖

首先,您需要在 AndroidManifest.xml 中添加 Internet 用戶權限。

<uses-permission android:name="android.permission.INTERNET" />

然后參考這個獲取mac地址http : //robinhenniges.com/en/android6-get-mac-address-programmatically

如果它不起作用,請參考此Android 6.0 更改,我得出的結論是,

為了向用戶提供更好的數據保護,從本版本開始,Android 刪除了使用 Wi-Fi 和藍牙 API 的應用程序對設備本地硬件標識符的編程訪問。 WifiInfo.getMacAddress() 和 BluetoothAdapter.getAddress() 方法現在返回一個常量值 02:00:00:00:00:00。

要通過藍牙和 Wi-Fi 掃描訪問附近外部設備的硬件標識符,您的應用現在必須具有 ACCESS_FINE_LOCATION 或 ACCESS_COARSE_LOCATION 權限。 需要注意的你不能讓自己的MAC甚至有這些權限。 仔細閱讀,據說您可以獲得具有這些權限的其他設備MAC,但不是您自己的

在 6.0 及更高版本中,僅在 Manifest 中添加權限是行不通的。 您應該擁有運行時權限,如果未授予,則授予它。

檢查此鏈接:

https://stackoverflow.com/a/30549756/3910281

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM