【Android】获取Mac地址【1】

(1) 调用android 的API: NetworkInterface. getHardwareAddress ()

该API的level为9,只有android 2.3以上才有该接口

(2) 调用java 的方法: nbtstat/arp

一般android不支持这两个命令

(3) 调用Android的API: WifiManager

权限:

1 "android.permission.ACCESS_WIFI_STATE" >

代码:

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                   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”

需要有这个文件,并且记录了相应的内容

更多相关文章

  1. Android的xml文件中@、@android:type、@*、?、@+的含义和区别
  2. Android布局文件中常用的属性
  3. Android工具箱之文件目录
  4. [Android] 基于 Linux 命令行构建 Android 应用(二):命令行管理项目
  5. android布局文件中各属性所代表的意义
  6. Android中资源文件的Shape使用总结
  7. 使用Android adb命令来启动Android应用程序
  8. 【魔幻塔防】60关配置文件
  9. 【魔幻塔防】80关配置文件

随机推荐

  1. android小特效(持续更新...)
  2. 新建Android项目的时候,选择SDK的区别
  3. Appium元素定位(name、classname、相对路
  4. android中判断sim卡状态和读取联系人资料
  5. nodejs的交叉(跨平台)编译(to android)
  6. 【Android】强大的SpannableStringBuilde
  7. Android(安卓)Audio代码分析=Audio Strat
  8. Android(安卓)recovery流程解析
  9. android中使用adb查看sqlite数据库
  10. Android(安卓)RxHttp在实战中的运用