/**
* 通过WiFiManager获取mac地址 * @param context * @return
*/
private static String tryGetWifiMac(Context context) {
// WifiManager wm = (WifiManager) context.getApplicationContext().getSystemService(Context.WIFI_SERVICE);
// WifiInfo wi = wm.getConnectionInfo();
// if (wi == null || wi.getMacAddress() == null) {
// return null;
// }
// if ("02:00:00:00:00:00".equals(wi.getMacAddress().trim())) {
// return null;
// }
// else {
// return wi.getMacAddress().trim();
// }
String strMac = null;
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
strMac = getLocalMacAddressFromWifiInfo(context);
return strMac;
} else if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N && Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
strMac = getMacAddress();
return strMac;
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
if (!TextUtils.isEmpty(getMacAddress())) {
strMac = getMacAddress();
return strMac;
} else if (!TextUtils.isEmpty(getMachineHardwareAddress())) {
strMac = getMachineHardwareAddress();
return strMac;
} else {
strMac = getLocalMacAddressFromBusybox();
return strMac;
}
}
return "02:00:00:00:00:00";
}
/**
* 根据busybox获取本地Mac * * @return
*/
public static String getLocalMacAddressFromBusybox() {
String result = "";
String Mac = "";
result = callCmd("busybox ifconfig", "HWaddr");
// 如果返回的result == null,则说明网络不可取
if (result == null) {
return "网络异常";
} // 对该行数据进行解析 // 例如:eth0 Link encap:Ethernet HWaddr 00:16:E8:3E:DF:67
if (result.length() > 0 && result.contains("HWaddr") == true) {
Mac = result.substring(result.indexOf("HWaddr") + 6, result.length() - 1);
result = Mac;
}
return result;
}
private static String callCmd(String cmd, String filter) {
String result = "";
String line = "";
try {
Process proc = Runtime.getRuntime().exec(cmd);
InputStreamReader is = new InputStreamReader(proc.getInputStream());
BufferedReader br = new BufferedReader(is);
while ((line = br.readLine()) != null && line.contains(filter) == false) {
result += line;
}
result = line;
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
/** * android 7.0及以上 (2)扫描各个网络接口获取mac地址 * */
/**
* 获取设备HardwareAddress地址 * * @return
*/
public static String getMachineHardwareAddress() {
Enumeration<NetworkInterface> interfaces = null;
try {
interfaces = NetworkInterface.getNetworkInterfaces();
} catch (SocketException e) {
e.printStackTrace();
}
String hardWareAddress = null;
NetworkInterface iF = null;
if (interfaces == null) {
return null;
}
while (interfaces.hasMoreElements()) {
iF = interfaces.nextElement();
try {
hardWareAddress = bytesToString(iF.getHardwareAddress());
if (hardWareAddress != null) break;
} catch (SocketException e) {
e.printStackTrace();
}
}
return hardWareAddress;
}
/*** * byte转为String * * @param bytes * @return */
private static String bytesToString(byte[] bytes) {
if (bytes == null || bytes.length == 0) {
return null;
}
StringBuilder buf = new StringBuilder();
for (byte b : bytes) {
buf.append(String.format("%02X:", b));
}
if (buf.length() > 0) {
buf.deleteCharAt(buf.length() - 1);
}
return buf.toString();
}
public static String getLocalMacAddressFromWifiInfo(Context context) {
WifiManager wifi = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
WifiInfo info = wifi.getConnectionInfo();
return info.getMacAddress();
}
Android获取手机端mac地址
最新推荐文章于 2024-11-28 09:13:09 发布

2041

被折叠的 条评论
为什么被折叠?



