获取Android开发板WiFi无线网卡MAC地址和有线网卡MAC地址
硬件/软件环境:
1)全志芯片开发板A40i
2)Android Studio Giraffe | 2022.3.1 Patch 3
获取方式:
1)ADB方式:
ADB获取有线网卡MAC地址,在cmd.exe窗口中执行命令:
adb shell
cat /sys/class/net/eth0/address
如下图所示:
ADB获取WiFi无线网卡MAC地址,在cmd.exe窗口中执行命令:
adb shell
cat /sys/class/net/wlan0/address
2)代码方式:
AndroidManifest.xml添加权限内容:
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
添加获取WiFi无线网卡MAC地址方法:
//获取WiFi无线网卡MAC地址
public String getWiFiMacAddress(){
try {
List<NetworkInterface> allNI = Collections.list(NetworkInterface.getNetworkInterfaces());
for (NetworkInterface ni : allNI) {
if (!ni.getName().equalsIgnoreCase("wlan0")) {
continue;
}
byte[] macAddressBytes = ni.getHardwareAddress();
if (null == macAddressBytes) {
return "";
}
StringBuilder sb1 = new StringBuilder();
for (byte mab : macAddressBytes) {
sb1.append(String.format("%02X:", mab));
}
if (sb1.length() > 0) {
sb1.deleteCharAt(sb1.length() - 1);
}
return sb1.toString();
}
} catch (Exception e) {
e.printStackTrace();
}
return "02:00:00:00:00:00";
}
添加获取有线网卡MAC地址方法:
//获取有线网卡MAC地址
public String getWiredMacAddress() {
try {
List<NetworkInterface> allNI = Collections.list(NetworkInterface.getNetworkInterfaces());
for (NetworkInterface ni : allNI) {
if (!ni.getName().contains("eth")) {
continue;
}
if (ni.getName().startsWith("eth")) {
byte[] macAddressBytes = ni.getHardwareAddress();
if (null != macAddressBytes) {
StringBuilder sb1 = new StringBuilder();
for (byte mab : macAddressBytes) {
sb1.append(String.format("%02X:", mab));
}
if (sb1.length() > 0) {
sb1.deleteCharAt(sb1.length() - 1);
}
return sb1.toString();
}
}
}
} catch (Exception ex) {
ex.printStackTrace();
}
return "02:10:00:00:00:00";
}
执行结果:
Android系统中标识唯一性,可以采用MAC地址方式来区分的。