最近由於專案需要mac位址的記錄,搞了乙個通用的適配類,目前經過測試可以適配android所有版本,我測試過的裝置系統android 4 5 6 7 7+都可以獲取到,廢話不多說直接上**,簡潔:
該類分為三類:android6.0以下、6.0以上7.0以下、7.0以上
首先是獲取mac的整合方法:
public static string getmac(context context) else if (build.version.sdk_int < build.version_codes.n
&& build.version.sdk_int >= build.version_codes.m) else if (build.version.sdk_int >= build.version_codes.n) else if (!textutils.isempty(getmachinehardwareaddress())) else
}return "02:00:00:00:00:00";
}
6.0以下方法,google提供的公有方法,需要許可權
/**
* 根據wifi資訊獲取本地mac
* * @param context
* @return
*/public static string getlocalmacaddressfromwifiinfo(context context)
android 6.0以後 將不再能通過 wifimanager 獲取mac,獲取到的mac將是固定的:02:00:00:00:00:00
。
然而我開發的sdk就是通過wifimanager獲取的mac。
android sdk後來做了6.0適配,通過cat /sys/class/net/wlan0/address,可以在6.0上獲取mac位址。
/**
* android 6.0及以上、7.0以下 獲取mac位址
* * @param context
* @return
*/public static string getmacaddress(context context)
}string str = "";
string macserial = "";
try
}} catch (exception ex)
if (macserial == null || "".equals(macserial)) catch (exception e)
}return macserial;
}private static string getmacaddress0(context context) catch (exception e)
}return "";
}/**
* check whether accessing wifi state is permitted
* * @param context
* @return
*/private static boolean isaccesswifistateauthorized(context context) else
return false;
}private static string loadfileasstring(string filename) throws exception
private static string loadreaderasstring(reader reader) throws exception
return builder.tostring();
}
android 7.0 後,通過上述適配的方法,將獲取不到mac位址。
總共分為三種方式:
**如下:
/**
* 根據ip位址獲取mac位址
** @return
*/public static string getmacaddress()
string str = integer.tohexstring(b[i] & 0xff);
}strmacaddr = buffer.tostring().touppercase();
} catch (exception e)
return strmacaddr;
}/**
* 獲取移動裝置本地ip
** @return
*/private static inetaddress getlocalinetaddress()
if (ip != null)
}} catch (socketexception e)
return ip;
}/**
* 獲取本地ip
** @return
*/private static string getlocalipaddress() }}
} catch (socketexception ex)
return null;
}/**
* android 7.0及以上 (2)掃瞄各個網路介面獲取mac位址**/
/*** 獲取裝置hardwareaddress位址
** @return
*/public static string getmachinehardwareaddress() catch (socketexception e)
string hardwareaddress = null;
networkinte***ce if = null;
if (inte***ces == null)
while (inte***ces.hasmoreelements()) catch (socketexception e)
}return hardwareaddress;
}/***
* byte轉為string
** @param bytes
* @return
*/private static string bytestostring(byte bytes)
stringbuilder buf = new stringbuilder();
for (byte b : bytes)
if (buf.length() > 0)
return buf.tostring();
}/** * android 7.0及以上 (3)通過busybox獲取本地儲存的mac位址
* */
/*** 根據busybox獲取本地mac
** @return
*/public static string getlocalmacaddressfrombusybox()
// 對該行資料進行解析
// 例如:eth0 link encap:ethernet hwaddr 00:16:e8:3e:df:67
if (result.length() > 0 && result.contains("hwaddr") == true)
return result;
}private static string callcmd(string cmd, string filter)
result = line;
} catch (exception e)
return result;
}
獲取Android的MAC位址
在android平台上,如果在開始啟動前去載入乙個測試程式,該測試程式的功能是去讀取wifi的mac位址,然後顯示出來,顯示的方式可以使用移植recovery源 的miniui。那麼讀wifi的mac位址無疑便是要初始化,裝載wifi驅動後,通過cat sys class net wlan0 add...
android獲取Mac位址和IP位址
獲取mac位址實際專案中測試了如下幾種方法 1 裝置開通wifi連線,獲取到網絡卡的mac位址 但是不開通wifi,這種方法獲取不到mac位址,這種方法也是網路上使用的最多的方法 根據wifi資訊獲取本地mac public static string getlocalmacaddressfromw...
獲取MAC位址
簡單的辦法是在控制台輸入ping 目標ip,然後用 arp a 來檢視.或者下面的 記下來以備後用 private declare function inet addr function inet addr lib wsock32.dll byval s as string as int32 pri...