獲取物理地址的方法,支持Android 5.0~Android 10.0
public String getMacAddress() {
List<NetworkInterface> interfaces = null;
try {
interfaces = Collections.list(NetworkInterface.getNetworkInterfaces());
for (NetworkInterface networkInterface : interfaces) {
if (networkInterface != null && TextUtils.isEmpty(networkInterface.getName()) == false) {
if ("wlan0".equalsIgnoreCase(networkInterface.getName())) {
byte[] macBytes = networkInterface.getHardwareAddress();
if (macBytes != null && macBytes.length > 0) {
StringBuilder str = new StringBuilder();
for (byte b : macBytes) {
str.append(String.format("%02X:", b));
}
if (str.length() > 0) {
str.deleteCharAt(str.length() - 1);
}
return str.toString();
}
}
}
}
} catch (SocketException e) {
e.printStackTrace();
}
return "unknown";
}
該方法需要請求網絡權限:
<uses-permission android:name="android.permission.INTERNET"/>
Android 6.0之前獲取物理地址的方法
public String getMacAddress(Context context) {
if (context != null) {
try {
WifiManager wifi = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
if (wifi != null) {
WifiInfo info = wifi.getConnectionInfo();
if (info != null) {
return info.getMacAddress();
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
return "unknown";
}
Android 6.0 開始,使用上述方法返回值總是 02:00:00:00:00:00。
爲給用戶提供更嚴格的數據保護,從此版本開始,對於使用 WLAN API 和 Bluetooth API 的應用,Android 移除了對設備本地硬件標識符的編程訪問權。WifiInfo.getMacAddress() 方法和 BluetoothAdapter.getAddress() 方法現在會返回常量值 02:00:00:00:00:00。
現在,要通過藍牙和 WLAN 掃描訪問附近外部設備的硬件標識符,您的應用必須擁有 ACCESS_FINE_LOCATION 或 ACCESS_COARSE_LOCATION 權限。WifiManager.getScanResults() BluetoothDevice.ACTION_FOUND BluetoothLeScanner.startScan()
Android 7.0 提供 DevicePolicyManager.getWifiMacAddress
設備所有者可以訪問設備標識符。設備所有者可以使用 DevicePolicyManagewr.getWifiMacAddress()
訪問設備的 WLAN MAC 地址。如果設備上從未啓用 WLAN,則此方法將返回一個 null 值。
通過上述方法獲取MAC地址需要申請設備管理者權限,如果應用本身用不到該權限,不推薦使用。
獲取設備管理者權限的方法可參照下述鏈接:
Android 10.0 隨機分配 MAC 地址
默認情況下,在搭載 Android 10 或更高版本的設備上,系統會傳輸隨機分配的 MAC 地址。
如果您的應用處理企業使用場景,平臺會提供 API,用於執行與 MAC 地址相關的幾個操作。
獲取隨機分配的 MAC 地址:設備所有者應用和資料所有者應用可以通過調用 getRandomizedMacAddress()
檢索分配給特定網絡的隨機分配 MAC 地址。 獲取實際的出廠 MAC 地址:設備所有者應用可以通過調用
getWifiMacAddress() 檢索設備的實際硬件 MAC 地址。此方法對於跟蹤設備隊列非常有用。