获取安卓设备的MAC地址需要使用WifiManager,以下是一个获取MAC地址的工具类:
```
import android.annotation.SuppressLint;
import android.content.Context;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.os.Build;
import android.text.TextUtils;
import java.net.NetworkInterface;
import java.util.Collections;
import java.util.List;
public class DeviceInfoUtils {
/**
* 获取设备 MAC 地址
*
* @param context 上下文
* @return 设备 MAC 地址
*/
@SuppressLint({"HardwareIds", "MissingPermission"})
public static String getDeviceMacAddress(Context context) {
String macAddress = "";
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) { // Android 6.0 以下
WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
if (wifiManager != null) {
WifiInfo wifiInfo = wifiManager.getConnectionInfo();
if (wifiInfo != null) {
macAddress = wifiInfo.getMacAddress();
}
}
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) { // Android 6.0 - Android 10.0
try {
List<NetworkInterface> all = Collections.list(NetworkInterface.getNetworkInterfaces());
for (NetworkInterface nif : all) {
if (!nif.getName().equalsIgnoreCase("wlan0")) {
continue;
}
byte[] macBytes = nif.getHardwareAddress();
if (macBytes == null) {
return "";
}
StringBuilder res1 = new StringBuilder();
for (byte macByte : macBytes) {
res1.append(String.format("%02X:", macByte));
}
if (res1.length() > 0) {
res1.deleteCharAt(res1.length() - 1);
}
macAddress = res1.toString();
}
} catch (Exception e) {
e.printStackTrace();
}
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { // Android 10.0 以上
try {
String iface = "wlan0";
NetworkInterface networkInterface = NetworkInterface.getByName(iface);
if (networkInterface == null) {
return "";
}
byte[] hardwareAddress = networkInterface.getHardwareAddress();
if (hardwareAddress == null || hardwareAddress.length == 0) {
return "";
}
StringBuilder builder = new StringBuilder();
for (byte b : hardwareAddress) {
builder.append(String.format("%02X:", b));
}
if (builder.length() > 0) {
builder.deleteCharAt(builder.length() - 1);
}
macAddress = builder.toString();
} catch (Exception e) {
e.printStackTrace();
}
}
return macAddress;
}
}
```
调用该工具类获取设备的MAC地址:
```
String macAddress = DeviceInfoUtils.getDeviceMacAddress(context);
```
需要注意的是,Android 6.0 以上获取 MAC 地址需要申请 ACCESS_WIFI_STATE 权限。另外,从 Android Q 开始,不能直接获取设备的 MAC 地址,需要使用其他方式来获取设备的唯一标识符。