targetSdkVersion 33如何获取mac地址
时间: 2023-10-18 07:04:16 浏览: 138
在 Android 12 及以上版本中,为了保护用户的隐私,Google 已经禁止应用程序直接访问 MAC 地址。如果您的应用程序的 `targetSdkVersion` 设置为 33(即 Android 12),则不能使用传统的方式获取 MAC 地址,否则会导致应用程序崩溃或者无法通过应用商店审核。
如果您需要获取设备的唯一标识符,可以考虑使用 Android ID 或 Instance ID,这两种方式在上一个问题中已经有详细介绍了。
如果您非常需要使用 MAC 地址来进行设备标识,可以尝试使用以下方法:
1. 如果您的应用程序的 `targetSdkVersion` 小于 29(即 Android 10),则可以通过以下代码获取 MAC 地址:
```
WifiManager wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
WifiInfo wifiInfo = wifiManager.getConnectionInfo();
String macAddress = wifiInfo.getMacAddress();
```
2. 如果您的应用程序的 `targetSdkVersion` 大于等于 29,但小于 31(即 Android 11),可以通过以下方式获取 MAC 地址:
```
try {
Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces();
while (interfaces.hasMoreElements()) {
NetworkInterface networkInterface = interfaces.nextElement();
byte[] hardwareAddress = networkInterface.getHardwareAddress();
if (hardwareAddress != null && hardwareAddress.length > 0) {
StringBuilder stringBuilder = new StringBuilder();
for (byte b : hardwareAddress) {
stringBuilder.append(String.format("%02X:", b));
}
if (stringBuilder.length() > 0) {
stringBuilder.deleteCharAt(stringBuilder.length() - 1);
}
String macAddress = stringBuilder.toString();
// 根据需要,可以添加过滤条件来选择特定的网卡
if (!TextUtils.isEmpty(macAddress)) {
return macAddress;
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
```
需要注意的是,这种方法只能够获取到设备上的物理网卡的 MAC 地址,如果设备上没有物理网卡(例如虚拟机),则无法获取到 MAC 地址。此外,即使设备上有多个物理网卡,也不保证每个网卡都可以获取到 MAC 地址,因此需要根据实际需求进行过滤。
阅读全文