Android mac地址获取的方法小结及可能出现的问题

原创 2016年10月11日 15:08:09

     这段时间项目遇到个问题,客户把移动设备回厂修理后再安装我们的项目,运行会报错。后来经过我仔细排查发现一个很诡异的问题,就是无法获取mac地址了。于是我仔细把获取mac地址的一些资料看了看,加上一些调试,总算是解决了这个问题。现在决定把这块小结下,以免再次遇到问题。

     mac地址又称为物理地址,和ip地址不同的是,mac地址由网卡决定,也就是一个设备只能有一个mac地址,所以经常作为唯一标识码来使用。我在网上找了下,总共找到四中获取mac地址的方法。


1.通过wifimaneger来获取

    wifimaneger是Android里对wifi的管理器,可以通过它查询到网卡状态,无线信号列表,当前网络,连接ip,以及mac地址等。这是目前比较常见的一种,我用手机试了下,发现这个方法在手机刚开机时候是没用的,如图所示:

    

    当我打开了wifi(即使不连)以后,就可以获取到正常的mac地址了,如图所示:


    然后我发现,其实这个wifimaneger里获取的就和手机里的高级wlan里显示的一样,获取的mac地址或者是ip地址,如图所示:


    代码为:

mWifiManager = (WifiManager) context
        .getSystemService(Context.WIFI_SERVICE);
mWifiInfo = mWifiManager.getConnectionInfo();
String mScanResult = mWifiAdmin.getMacAddress();

     总结下就是:wifimaneger获取mac必须是打开wifi设置过一次(之后关闭也没事),之后就会正常获取到mac。我想可能是打开wifi设置就会查询网卡信息,获取到mac的值,并记录下来。


2.通过linux底层的方法获取

    这个也是比较常见的方法,android 底层是 Linux,我们用Linux的方法肯定能获取的,具体代码如下:

public static String getLocalMacAddress() {  
   String macSerial = null;
       String str = "";
       try {
               Process pp = Runtime.getRuntime().exec(
                               "cat /sys/class/net/wlan0/address ");
               InputStreamReader ir = new InputStreamReader(pp.getInputStream());
               LineNumberReader input = new LineNumberReader(ir);


               for (; null != str;) {
                       str = input.readLine();
                       if (str != null) {
                               macSerial = str.trim();// 去空格
                               break;
                       }
               }
       } catch (IOException ex) {
               // 赋予默认值
               ex.printStackTrace();
       }
       return macSerial;
    这个效果图我就不贴了,总结一下就是必须把wifi按钮打开,即使不连也行,当wifi关闭时候无法获取到mac地址。

 具体原理参考:http://www.tuicool.com/articles/ameQJfN 这位大神的文章。


3.通过busybox,cmd获取,具体代码如下:

result = GetMac_3.callCmd("busybox ifconfig","HWaddr");

public static 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;

第四种是根据IP获取本地mac

public static String getLocalMacAddressFromIp(Context context) {
    String mac_s= "";
    try {
        byte[] mac;
        NetworkInterface ne=NetworkInterface.getByInetAddress(InetAddress.getByName(getLocalIpAddress()));
        mac = ne.getHardwareAddress();
        mac_s = byte2hex(mac);
    } catch (Exception e) {
        e.printStackTrace();
    }

    return mac_s;

实话来说,第三和第四的方法我都没获取到mac。但是网上很多都提到了这两种方法,所以特地写出来供参考。

比如这篇就提到了http://blog.csdn.net/crazyman2010/article/details/50464256


版权声明:本文为博主原创文章,未经博主允许不得转载。

Android 手机获取Mac地址的几种方法

Android 获取mac地址的几种方法

获取手机mac地址和串号IMEI

IMEI 是国际移动设备身份码的缩写,国际移动装备辨识码,是由15位数字组成的"电子串号",它与每台手机一一对应,而且该码是全世界唯一的。每一只手机在组装完成后都将被赋予一个全球唯一的一组号码,这个号...

android 设备唯一码的获取,Cpu号,Mac地址

开发Android应用中,我们常常需要设备的唯一码来确定客户端。 Android 中的几中方法,使用中常常不可靠 1. DEVICE_ID 假设我们确实需要用到真实设备的标识...
  • hpccn
  • hpccn
  • 2012年08月16日 10:48
  • 16862

Android 6.0获取MAC地址

众所周知,Android 6.0系统,做出许多重大的变化,例如获取获取蓝牙MAC地址,如果使用‘BluetoothAdapter.getAddress()’将返回的是02:00:00:00:00:00...

Android 获取Mac地址

近来遇到一个问题,发现调试的xiao'ban

android4.0-7.0获取mac地址,方法是google提供。

获取Android mac地址,4.0一直到6.0,7.0系统都可以获取得到Mac地址 在AndroidManifest.xml中加入以下权限: uses-permission and...

Android 6.0获取MAC地址

众所周知,Android 6.0系统,做出许多重大的变化,例如获取获取蓝牙MAC地址,如果使用‘BluetoothAdapter.getAddress()’将返回的是02:00:00:00:00:00...

(转)android获取Mac地址和IP地址

获取Mac地址实际项目中测试了如下几种方法: (1)设备开通Wifi连接,获取到网卡的MAC地址(但是不开通wifi,这种方法获取不到Mac地址,这种方法也是网络上使用的最多的方法) //根据...
  • gxj1680
  • gxj1680
  • 2014年02月11日 17:38
  • 24729

Android 不开WiFi获取Mac地址 夜未央

这是我在网站上找到的资料 整理一下 不知道哪天会用到  //在不开起WiFi的情况下获取mac地址 public static String getLocalMacAddress() { Stri...

Android中Wifi未开启情况下获取Mac地址

原来以为没有开启wifi功能是不能够获取wifi网卡mac地址的,在真机测试后发现能够获取到Mac地址只是获取的ip为0,当然wifi未连接状态下是肯定没有IP分配的。具体看看下面:  Androi...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android mac地址获取的方法小结及可能出现的问题
举报原因:
原因补充:

(最多只允许输入30个字)