㈠ 如何使用Java代碼獲取Android和ios移動終端Mac地址
通過設備開通wifi連接獲取Mac地址是最可取的,代碼如下:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/**
* 設備開通WiFi連接,通過wifiManager獲取Mac地址
*
* @author 高煥傑
*/
public static String getMacFromWifi(Context context){
ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
State wifiState = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState();
if(wifiState == NetworkInfo.State.CONNECTED){//判斷當前是否使用wifi連接
WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
if (!wifiManager.isWifiEnabled()) { //如果當前wifi不可用
wifiManager.setWifiEnabled(true);
}
WifiInfo wifiInfo = wifiManager.getConnectionInfo();
return wifiInfo.getMacAddress();
}
return null;
}
除了上面這種方法,網上還給出了另外兩種方法:
1、通過調用Linux的busybox命令獲取Mac地址:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/**
* 通過調用Linux的busybox命令獲取Mac地址
*
* @author 高煥傑
*/
private static String getMacFromCallCmd(){
try {
String readLine = ;
Process process = Runtime.getRuntime().exec(busybox ifconfig);
BufferedReader bufferedReader = new BufferedReader (new InputStreamReader(process.getInputStream()));
while ((readLine = bufferedReader.readLine ()) != null) {//執行命令cmd,只取結果中含有HWaddr的這一行
if(readLine.contains(HWaddr)){
return readLine.substring(readLine.indexOf(HWaddr)+6, readLine.length()-1);
}
}
}catch(Exception e) { //如果因設備不支持busybox工具而發生異常。
e.printStackTrace();
}
return null;
}
注意:這種方法在Android Pad中可以准確獲取到的Mac地址,但是在Android手機中無法准確獲取到。
2、通過查詢記錄了MAC地址的文件(文件路徑:「/proc/net/arp」)獲取Mac地址:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
/**
* 通過查詢記錄了MAC地址的文件(文件路徑:「/proc/net/arp」)獲取Mac地址
*
* @author 高煥傑
*/
private static String getMacFromFile(Context context){
String readLine =;
BufferedReader bufferedReader = null;
try {
bufferedReader = new BufferedReader(new FileReader(new File(/proc/net/arp)));
int rollIndex = 0;
while((readLine = bufferedReader.readLine())!=null){
if(rollIndex == 1){
break;
}
rollIndex = rollIndex + 1;
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (bufferedReader != null) {
try {
bufferedReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
if(readLine !=null && readLine.length()>1){
String[] subReadLineArray = readLine.split( );
int rollIndex = 1;
for(int i = 0; i < subReadLineArray.length; ++i){
if(!TextUtils.isEmpty(subReadLineArray[i])){
if(rollIndex == 4){
return subReadLineArray[i];
}
rollIndex = rollIndex + 1;
}
}
}
return null;
}
注意:無論在Android Pad中還是在Android手機中,這種方法都無法准確獲取到Mac地址。