在 Android 11 中,获取设备的 MAC 地址的方法有所变化。由于隐私和安全的原因,Android 11 不再直接提供获取 MAC 地址的 API。相反,应使用以下方法来获取设备的 MAC 地址:
方法一:使用 NetworkInterface 获取 MAC 地址
import java.net.NetworkInterface;
import java.util.Collections;
import java.util.List;
public class MacAddressUtils {
public static String getMacAddress() {
try {
List interfaces = Collections.list(NetworkInterface.getNetworkInterfaces());
for (NetworkInterface intf : interfaces) {
if (intf.getName().equalsIgnoreCase("wlan0")) {
byte[] mac = intf.getHardwareAddress();
if (mac == null) {
return null;
}
StringBuilder stringBuilder = new StringBuilder();
for (byte aMac : mac) {
stringBuilder.append(String.format("%02X:", aMac));
}
if (stringBuilder.length() > 0) {
stringBuilder.deleteCharAt(stringBuilder.length() - 1);
}
return stringBuilder.toString();
}
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
在上述代码中,我们使用 NetworkInterface 类的 getHardwareAddress() 方法来获取设备的 MAC 地址。请注意,这种方法可能在某些设备上不起作用,因为不是所有设备都支持获取 MAC 地址。
方法二:使用 WiFiManager 获取 MAC 地址
import android.content.Context;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
public class MacAddressUtils {
public static String getMacAddress(Context context) {
try {
WifiManager wifiManager = (WifiManager) context.getApplicationContext().getSystemService(Context.WIFI_SERVICE);
WifiInfo wifiInfo = wifiManager.getConnectionInfo();
return wifiInfo.getMacAddress();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
上述代码使用 WifiManager 类的 getConnectionInfo() 方法来获取设备的 MAC 地址。
请注意,无论使用哪种方法,都需要在 AndroidManifest.xml 文件中添加以下权限:
在使用这些方法获取 MAC 地址时,请确保在 AndroidManifest.xml 文件中添加了适当的权限,并确保在运行时已经获取了这些权限。