概述
用Android6.0、Android7.1.1测试过程中发现获取MAC地址返回的是“02:00:00:00:00:00”,这个地址一看就不是真实的MAC地址,所以百度了一下,原因由于Android 6.0变更。
原文如下:
Android 6.0 变更:硬件标识符访问权
获取MAC地址几种方法总结如下:
/**
* 获取本机MAC地址,适用Android 6.0 版本以下系统,需要权限android.permission.ACCESS_WIFI_STATE
* Android 6.0 及以上版本系统返回常量“02:00:00:00:00:00”
* @param context
* @return
*/
public static final String getMacAddress(Context context) {
WifiInfo wifiInfo = ((WifiManager) context.getSystemService(Context.WIFI_SERVICE)).getConnectionInfo();
if(wifiInfo != null && wifiInfo.getMacAddress() != null) {
return wifiInfo.getMacAddress();
}
return "";
}
/**
* 获取本机MAC地址,适用Android 6.0 及以上版本系统
* 调用此方法时需开启wifi
* @return
*/
public static final String getMacAddressByFile(){
File file = new File("/sys/class/net/wlan0/address");
if(file.exists()){
try {
InputStream inputStream = new FileInputStream(file);
byte[] data = StreamUtils.readInputStream(inputStream);
return new String(data, "utf-8");
} catch (Exception e) {
e.printStackTrace();
}
}
return "";
}
/**
* 获取本机MAC地址,适用Android 6.0 及以上版本系统
* 调用此方法时需开启wifi
* @return
*/
public static final String getAdressMacByInterface(){
try {
List<NetworkInterface> all = Collections.list(NetworkInterface.getNetworkInterfaces());
for (NetworkInterface networkInterface : all) {
if (networkInterface.getName().equalsIgnoreCase("wlan0")) {
byte[] macBytes = networkInterface.getHardwareAddress();
if (macBytes == null) {
return "";
}
StringBuilder res1 = new StringBuilder();
for (byte b : macBytes) {
res1.append(String.format("%02X:",b));
}
if (res1.length() > 0) {
res1.deleteCharAt(res1.length() - 1);
}
return res1.toString();
}
}
} catch (Exception e) {
e.printStackTrace();
}
return "";
}
最后
以上就是风中西牛为你收集整理的安卓获取MAC地址,适配Android 6.0的全部内容,希望文章能够帮你解决安卓获取MAC地址,适配Android 6.0所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复