2018-01-23 安卓获取mac地址

在网上搜索过了很多的获取手机的mac地址方法 今天在这里整理一下学习到的方法~

通过wifimanager获取mac地址

这个是官方的获取方法 代码如下

   WifiManager mgrWifi = 
   (WifiManager)getApplicationContext().getSystemService(Context.WIFI_SERVICE);
   if(null == mgrWifi)return "";
   WifiInfo info = mgrWifi.getConnectionInfo();
   if(null == info)return "";
   String sMac = info.getMacAddress();
   if(null == sMac)return "";
   return sMac;

这个方法在安卓6.0之后便只能获取到02:00:00:00:00,官方解释说为了保护用户隐私,所以这个现在应该被弃用了吧(话说被弃用了居然还写出来,真的是恶心)

通过NetworkInterface后去mac地址

通过网络接口获取mac地址,这种方法取代了之前的WiFimanager的方法,可以做6.0版本之后同样适用,只不过需要添加权限,另外还需要开启wifi才可以获取到mac地址(不过有些手机在wifi关闭后就获取不到mac地址了,例如华为) 在网络接口中找到wlan0,它对应的地址及为mac地址。(这里另外还有好多其他的,这里打印一个日志可以看到)
这里有一个大佬写的解释 简书:获取android手机mac地址
关闭时的日志

01-23 18:13:25.402 29573-29573/com.example.administrator.mytestapplication D/TEST_BUG: interfaceName=dummy0, mac=42:38:D5:B2:4A:FE

开启时的日志

01-23 18:14:04.146 29573-29573/com.example.administrator.mytestapplication D/TEST_BUG: interfaceName=p2p0, mac=7A:62:56:14:09:07
01-23 18:14:04.150 29573-29573/com.example.administrator.mytestapplication D/TEST_BUG: interfaceName=dummy0, mac=42:38:D5:B2:4A:FE
01-23 18:14:04.155 29573-29573/com.example.administrator.mytestapplication D/TEST_BUG: interfaceName=wlan0, mac=78:62:56:14:09:07

下面就是代码部分

   String macAddress = null;
   StringBuffer buf = new StringBuffer();
   NetworkInterface networkInterface = null;
   try {
       networkInterface = NetworkInterface.getByName("eth1");
       if (networkInterface == null) {
           networkInterface = NetworkInterface.getByName("wlan0");
       }
       if (networkInterface == null) {
           return "02:00:00:00:00:00";
       }
       byte[] addr = networkInterface.getHardwareAddress();
       for (byte b : addr) {
           buf.append(String.format("%02X:", b));
       }
       if (buf.length() > 0) {
           buf.deleteCharAt(buf.length() - 1);
       }
       macAddress = buf.toString();
   } catch (SocketException e) {
       e.printStackTrace();
       return "02:00:00:00:00:00";
   }
   return macAddress;

需要以下权限

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

暂时写这么多 找到了其他的发现都没什么用 到时候再补上来

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,923评论 18 139
  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 6,523评论 0 17
  • 一. Java基础部分.................................................
    wy_sure阅读 3,835评论 0 11
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,765评论 18 399
  • 如果 npm install -g ionic cordova 你这一过程正常进行,那就最好了,下面的也用看了,...
    紫荆逸阅读 2,080评论 0 0