我一直在使用以下代码片段在运行 9 和 10 的 Android 设备上成功检索 MAC 地址:但是此功能不适用于 android 11 及更高版本
public String getMacAddressAndroid6Plus() {
try {
List<NetworkInterface> interfaces = Collections.list(NetworkInterface.getNetworkInterfaces());
for (NetworkInterface intf : interfaces) {
if (!intf.getName().equalsIgnoreCase("wlan0")) {
continue;
}
byte[] mac = intf.getHardwareAddress();
if (mac == null) {
Log.e("MACLogs", "MAC address is null");
return null;
}
StringBuilder buf = new StringBuilder();
for (byte aMac : mac) {
buf.append(String.format("%02X:", aMac));
}
if (buf.length() > 0) {
buf.deleteCharAt(buf.length() - 1);
}
String macAddress = buf.toString();
Log.d("MACLogs", "MAC address: " + macAddress);
return macAddress;
}
} catch (Exception e) {
Log.e("MACLogs", "Error getting MAC address: " + e.getMessage());
}
return null;
}
但是,我注意到这段代码不再适用于运行 Android 11 及更高版本的设备。有人可以建议一个解决方案来检索这些设备上的 MAC 地址吗?
我希望该函数能够像在运行 Android 9 和 10 的设备上那样检索设备的唯一 MAC 地址。
从Android 11谷歌不允许访问基于硬件的应用程序唯一ID。
Android 10(API 级别 29)增加了不可重置的限制 标识符,包括 IMEI 和序列号。您的应用必须 是设备或配置文件所有者应用程序,具有特殊的运营商权限,或者 拥有 READ_PRIVILEGED_PHONE_STATE 特权权限,以便 访问这些标识符
所以你不能访问MAC地址。而是考虑使用以下链接中的替代方法。
你可以访问这个链接
https://developer.android.com/training/articles/user-data-ids