解决Android 6.0获取wifi Mac地址为02:00:00:00:00:00问题【转】

本文转载自:http://www.jb51.net/article/128398.htm

这篇文章主要介绍了Android 6.0获取wifi Mac地址为02:00:00:00:00:00的解决方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下

前言:

之前项目比较旧,手机版本还比较低,还使用eclipse开发。用到了需要获取手机wifi Mac地址。使用了如下代码:

// Android 6.0之前的版本可以用的方法(模拟器可以使用)
  private String getMacAddrOld()
  {
    String macString = "";
    WifiManager wifimsg = (WifiManager)getSystemService(Context.WIFI_SERVICE);
    if (wifimsg != null)
    {
      if (wifimsg.getConnectionInfo() != null)
      {
        if (wifimsg.getConnectionInfo().getMacAddress() != null)
        {
          macString = wifimsg.getConnectionInfo().getMacAddress();
        }
      }
    }
    return macString;
  }

▲ 产生问题 :

使用这个方法,在模拟器上是可以正常获取wifi mac地址,但是在Android 6.0系统上,获取的就有问题,返回的是“02:00:00:00:00:00”

▲ 问题分析 :

原来谷歌官方为了给用户更多的数据保护,从这个6.0版本开始, Android 移除了通过 WiFi 和蓝牙 API 来在应用程序中可编程的访问本地硬件标示符。现在 WifiInfo.getMacAddress() 和 BluetoothAdapter.getAddress() 方法都将返回 02:00:00:00:00:00

▲ 解决方案 :

正所谓上有政策,下有对策。我们可以使用如下代码去获取手机wifi Mac地址,同样可以解决6.0以上版本问题。值得注意的是模拟器使用如下代码去获取是获取不到的!

public static String getMacAddr() {
    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 "";
        }
        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) {
    }
    return "02:00:00:00:00:00";
  }

手机必须是有网络的状态下,同时注意不要忘了添加权限

  <uses-permission android:name="android.permission.INTERNET"/>
  <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

总结

以上所述是小编给大家介绍的Android 6.0获取wifi Mac地址为02:00:00:00:00:00的解决方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

时间: 2024-10-09 12:15:07

解决Android 6.0获取wifi Mac地址为02:00:00:00:00:00问题【转】的相关文章

Android 获取WIFI MAC地址的方法

1. 经常用法,调用Android的API:WifiManager <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission> WifiManager wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE); WifiInfo info = wifi.getConnectionInfo

获取设备mac地址和md5加密

SGMSettingConfig.h #import <Foundation/Foundation.h> @interface SGMSettingConfig : NSObject{ NSInteger HTTP_PACKAGE_SIZE; NSInteger HTTP_RETRY_TIMES; NSInteger REPLY_LENGTH; NSInteger MAX_AUDIO_TIME; NSInteger MAX_RESULT_AMOUNT; BOOL USE_DENOISE_AGC

Python 获取 网卡 MAC 地址

/*********************************************************************** * Python 获取 网卡 MAC 地址 * 说明: * 记录一下Python如何获取网卡MAC地址,主要用于数据唯一性保存. * * 2016-10-14 深圳 南山平山村 曾剑锋 **********************************************************************/ 一.参考文档: pyth

js获取客户端MAC地址

最近遇到一个需求,医院要求呼叫中心账号必须对应MAC地址,也就是说该MAC地址必须和呼叫中心账号对应才可使用,这可就难道我了,这需求就要求每次都判断用户登录的电脑MAC地址是否有呼叫中心账号,当然只针对IE浏览器,毕竟其他浏览器是直接就给禁止此功能的. 那么首先问题一:如何才能通过页面访问得到本地MAC地址 问题二:每台电脑上都有多个MAC地址,那么应该选用哪一个MAC地址 MAC地址是每台电脑链接网络的物理地址,是唯一标识,想要从浏览器获取电脑的信息,那么就需要ActiveX,所以其他浏览器是

【Javascript】获取客户端MAC地址(仅支持IE)

<HTML><HEAD><TITLE>WMI Scripting HTML</TITLE> <META http-equiv=Content-Type content="text/html; charset=gb2312"> <SCRIPT language=JScript event="OnCompleted(hResult,pErrorObject, pAsyncContext)" for=foo

Android 5.0 Lollipop SDK下载地址(PASS)

Android 5.0 ARM EABI v7a System Image https://dl-ssl.google.com/android/repository/sys-img/google_apis/sysimg_arm-21_r01.zip Android 5.0 Android TV ARM EABI v7a System Imagehttps://dl-ssl.google.com/android/repository/sys-img/android-tv/sysimg_atv_ar

PowerBulider获取计算机mac地址

PowerBulider获取计算机mac地址 1.下载GETNET.DLL获取网络资源的API 2.PB的全局函数中的引入需要API,常用API列表如下 //得到计算机名字 function boolean GetComputerNameA(ref string lpBuffer, ref ulong nSize) library "KERNEL32.DLL" alias for "GetComputerNameA;Ansi" //设置计算机名字 FUNCTION

Android获取wifi MAC,关闭的wifi不能获取

最近一直在尝试着在Android上通过ndk用C++获取本机MAC地址,但是用ioctl(SIOCGIFHWADDR)时,一直返回值小于0,即获取不到接口信息.刚开始我以为是自己漏掉了哪些访问权限,所以一直在增加uses-permission,后来发现不管怎么加都是这个情况,发现原来是用的android studio虚拟机没有打开wifi导致的.因为WiFi的Mac address是一个被动资讯.一般在开机后,不会主动上报到系统裡.要待WiFi硬件启动后,才会把有关Mac address资料记载

每日总结-Android获取手机Mac地址

(1) 调用android 的API: NetworkInterface. getHardwareAddress () 该API的level为9,只有android 2.3以上才有该接口 (2) 调用Android的API: WifiManager 权限: <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission> 代码: 1 WifiManage