android 获取MAC
16lz
2021-01-23
(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> |
代码:
?12345 | WifiManager wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE); WifiInfo info = wifi.getConnectionInfo(); return info.getMacAddress(); |
这个是设备开通Wifi连接,获取到网卡的MAC地址
(4) 调用Linux的busybox
?123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 | /*
*****************************************************************
* 子函数:获得本地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;
} |
这个需要设备支持busybox工具
(5)查询记录了MAC地址的文件“/proc/net/arp”
需要有这个文件,并且记录了相应的内容
更多相关文章
- Android 自定义View及其在布局文件中的使用示例(三):结合Android
- Android 4.4 SD卡文件读写变化
- Android 自动编译、打包生成apk文件 2 - 使用原生Ant方式
- android命令行播放mp3
- Android教程之Android SDK1.5模拟器使用命令
- Android学习之路(一)之 Android文件简单介绍
- Android 上如何移植live555生成库文件
- Android NDK 使用第一步,编译c文件,声明jni并调用。