(1) 调用android 的API: NetworkInterface. getHardwareAddress ()
该API的level为9,只有android 2.3以上才有该接口
(2) 调用java 的方法: nbtstat/arp
一般android不支持这两个命令
(3) 调用Android的API: WifiManager
权限:
1
|
<uses-permission
android:name= "android.permission.ACCESS_WIFI_STATE" ></uses-permission> |
代码:
1
2
3
4
5
|
WifiManager
wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE); WifiInfo
info = wifi.getConnectionInfo(); return info.getMacAddress(); |
这个是设备开通Wifi连接,获取到网卡的MAC地址
(4) 调用Linux的busybox
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
/*
***************************************************************** *
子函数:获得本地MAC地址 *****************************************************************
*/ 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;
} |