1 获取无线mac
/**
* @param applicationContext
* @return WifiMac ac:a2:13:6b:d0:29
*/
public static String getLocalWifiMacAddress(Context context) {
String wifiMac="";
WifiManager mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
WifiInfo mWifiInfo = mWifiManager.getConnectionInfo();
wifiMac=mWifiInfo.getMacAddress();
return wifiMac;
}
权限
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.INTERNET" />
2 有线mac
private EthernetManager mEthManager;
mEthManager = (EthernetManager) mActivity.getSystemService(Context.ETHERNET_SERVICE);
mEthManager.getMacAddr();
在application 层没有对应的接口
EthernetManager,不能使用
3其他方法
3.1 读取
/sys/class/net/eth0/address文件
/**
* 获取Ethernet的MAC地址
* @return
*/
private String getMacAddress() {
try {
return loadFileAsString("/sys/class/net/eth0/address").toUpperCase(Locale.ENGLISH).substring(0, 17);
} catch (IOException e) {
return null;
}
}
private String loadFileAsString(String filePath) throws java.io.IOException{
StringBuffer fileData = new StringBuffer(1000);
BufferedReader reader = new BufferedReader(new FileReader(filePath));
char[] buf = new char[1024]; int numRead=0;
while((numRead=reader.read(buf)) != -1){
String readData = String.valueOf(buf, 0, numRead);
fileData.append(readData);
}
reader.close();
return fileData.toString();
}
public String getMacAddress(){
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);
Log.i("test","Mac:"+Mac+" Mac.length: "+Mac.length());
if(Mac.length()>1){
Mac = Mac.replaceAll(" ", "");
result = "";
String[] tmp = Mac.split(":");
for(int i = 0;i<tmp.length;++i){
result +=tmp[i];
}
}
Log.i("test",result+" result.length: "+result.length());
}
return result;
}
public 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);
//执行命令cmd,只取结果中含有filter的这一行
while ((line = br.readLine ()) != null && line.contains(filter)== false) {
//result += line;
Log.i("test","line: "+line);
}
result = line;
Log.i("test","result: "+result);
}
catch(Exception e) {
e.printStackTrace();
}
return result;
}