Android手机获取Mac地址的方法

所属分类: 软件编程 / Android 阅读数: 1234
收藏 0 赞 0 分享

最常用的方法,通过WiFiManager获取:

/** 
   * 通过WiFiManager获取mac地址 
   * @param context 
   * @return 
   */ 
  private static String tryGetWifiMac(Context context) { 
    WifiManager wm = (WifiManager) context.getApplicationContext().getSystemService(Context.WIFI_SERVICE); 
    WifiInfo wi = wm.getConnectionInfo(); 
    if (wi == null || wi.getMacAddress() == null) { 
      return null; 
    } 
    if ("02:00:00:00:00:00".equals(wi.getMacAddress().trim())) { 
      return null; 
    } else { 
      return wi.getMacAddress().trim(); 
    } 
  } 

这个方法Android 7.0是获取不到的,返回的是null,其实是返回“02:00:00:00:00:00”

根据本地IP获取:

/** 
   * 根据IP地址获取MAC地址 
   * 
   * @return 
   */ 
  private static String getLocalMacAddressFromIp() { 
    String strMacAddr = null; 
    try { 
      //获得IpD地址 
      InetAddress ip = getLocalInetAddress(); 
      byte[] b = NetworkInterface.getByInetAddress(ip).getHardwareAddress(); 
      StringBuffer buffer = new StringBuffer(); 
      for (int i = 0; i < b.length; i++) { 
        if (i != 0) { 
          buffer.append(':'); 
        } 
        String str = Integer.toHexString(b[i] & 0xFF); 
        buffer.append(str.length() == 1 ? 0 + str : str); 
      } 
      strMacAddr = buffer.toString().toUpperCase(); 
    } catch (Exception e) { 
 
    } 
 
    return strMacAddr; 
  } 
 
/** 
   * 获取移动设备本地IP 
   * 
   * @return 
   */ 
  private static InetAddress getLocalInetAddress() { 
    InetAddress ip = null; 
    try { 
      //列举 
      Enumeration<NetworkInterface> en_netInterface = NetworkInterface.getNetworkInterfaces(); 
      while (en_netInterface.hasMoreElements()) {//是否还有元素 
        NetworkInterface ni = (NetworkInterface) en_netInterface.nextElement();//得到下一个元素 
        Enumeration<InetAddress> en_ip = ni.getInetAddresses();//得到一个ip地址的列举 
        while (en_ip.hasMoreElements()) { 
          ip = en_ip.nextElement(); 
          if (!ip.isLoopbackAddress() && ip.getHostAddress().indexOf(":") == -1) 
            break; 
          else 
            ip = null; 
        } 
 
        if (ip != null) { 
          break; 
        } 
      } 
    } catch (SocketException e) { 
 
      e.printStackTrace(); 
    } 
    return ip; 
  } 

这个方法Android 7.0及其以下版本都可以获取到。

根据网络接口获取:

/** 
 * 通过网络接口取 
 * @return 
 */ 
private static String getNewMac() { 
  try { 
    List<NetworkInterface> all = Collections.list(NetworkInterface.getNetworkInterfaces()); 
    for (NetworkInterface nif : all) { 
      if (!nif.getName().equalsIgnoreCase("wlan0")) continue; 
 
      byte[] macBytes = nif.getHardwareAddress(); 
      if (macBytes == null) { 
        return null; 
      } 
 
      StringBuilder res1 = new StringBuilder(); 
      for (byte b : macBytes) { 
        res1.append(String.format("%02X:", b)); 
      } 
 
      if (res1.length() > 0) { 
        res1.deleteCharAt(res1.length() - 1); 
      } 
      return res1.toString(); 
    } 
  } catch (Exception ex) { 
    ex.printStackTrace(); 
  } 
  return null; 
} 

注意网络接口的Name有跟多:dummy0、p2p0、wlan0....其中wlan0就是我们需要WiFi mac地址。这个方法Android 7.0及其以下版本都可以获取到。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

更多精彩内容其他人还在看

Android动态加载Activity原理详解

这篇文章主要介绍了Android动态加载Activity原理详解的相关资料,需要的朋友可以参考下
收藏 0 赞 0 分享

Android App中实现相册瀑布流展示的实例分享

这篇文章主要介绍了Android App中实现相册瀑布流展示的实例分享,例子中利用到了缓存LruCache类的相关算法来解决大量加载问题,需要的朋友可以参考下
收藏 0 赞 0 分享

Android开发中ImageLoder进行图片加载和缓存

这篇文章主要介绍了Android开发中ImageLoder进行图片加载和缓存的相关资料,需要的朋友可以参考下
收藏 0 赞 0 分享

详解Android Activity之间切换传递数据的方法

这篇文章主要介绍了详解Android Activity之间切换传递数据的方法 的相关资料,需要的朋友可以参考下
收藏 0 赞 0 分享

详解Android 手机卫士设置向导页面

这篇文章主要介绍了详解Android 手机卫士设置向导页面的相关资料,需要的朋友可以参考下
收藏 0 赞 0 分享

深入浅析Android手机卫士保存密码时进行md5加密

一般的手机没有root权限,进不去data/data目录,当手机刷机了后,拥有root权限,就可以进入data/data目录,查看我们保存的密码文件,因此我们需要对存入的密码进行MD5加密,接下来通过本文给大家介绍Android手机卫士保存密码时进行md5加密,需要的朋友一起学习
收藏 0 赞 0 分享

Android仿百度外卖自定义下拉刷新效果

大家在使用百度外卖的订餐的时候,会看到有个下拉刷新功能非常不错,今天小编就通过代码给大家介绍android仿百度外卖自定义下拉刷新,感兴趣的朋友一起学习吧
收藏 0 赞 0 分享

详解Android中Service服务的基础知识及编写方法

这篇文章主要介绍了详解Android中Service服务的基础知识及编写方法,包括Service的启动流程及生命周期等基本内容,需要的朋友可以参考下
收藏 0 赞 0 分享

实例讲解Android中的AIDL内部进程通信接口使用

这篇文章主要通过实例介绍了Android中的AIDL内部进程通信接口使用,文中通过一个音乐播放的服务编写例子来讲解AIDL的传递对象及一般使用步骤,需要的朋友可以参考下
收藏 0 赞 0 分享

浅析Android系统的架构以及程序项目的目录结构

这篇文章主要介绍了Android系统的架构以及程序项目的目录结构,是安卓开发入门学习中的基础知识,需要的朋友可以参考下
收藏 0 赞 0 分享
查看更多