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();

return info.getMacAddress();

此方法须要保证WIFI在本次开机以来以前是打开过的,否则会返回null。所以须要后台尝试先打开WIFI再获取。

演示样例代码:

//尝试打开wifi

private static boolean tryOpenMAC(WifiManager manager)

{

    boolean softOpenWifi = false;

    int state = manager.getWifiState();

    if (state != WifiManager.WIFI_STATE_ENABLED && state != WifiManager.WIFI_STATE_ENABLING)


    {

        manager.setWifiEnabled(true);

        softOpenWifi = true;

    }

    return softOpenWifi;

}

//尝试关闭MAC

private static void tryCloseMAC(WifiManager manager)

{

    manager.setWifiEnabled(false);

}

//尝试获取MAC地址

private static String tryGetMAC(WifiManager manager)

{

    WifiInfo wifiInfo = manager.getConnectionInfo();

    if (wifiInfo == null || StringUtil.isNull(wifiInfo.getMacAddress()))

    {

        return null;

    }

    String mac = wifiInfo.getMacAddress().replaceAll(":", "").trim().toUpperCase();

    mac = formatIdentify(mac);

    return mac;

}

//尝试读取MAC地址

private static String getMacFromDevice(int internal)

{

    String mac=null;

    WifiManager wifiManager = (WifiManager)getSystemService(Context.WIFI_SERVICE); 


    mac = tryGetMAC(wifiManager);

    if(!StringUtil.isNull(mac))

    {

        return mac;

    }

 

    //获取失败,尝试打开wifi获取

    boolean isOkWifi = tryOpenMAC(wifiManager);

    for(int index=0;index<internal;index++)

    {

        //假设第一次没有成功,第二次做100毫秒的延迟。

        if(index!=0)

        {

            try

            {

                Thread.sleep(100);

            }

            catch (InterruptedException e)

            {

                e.printStackTrace();

            }

        }

        mac = tryGetMAC(wifiManager);

        if(!StringUtil.isNull(mac))

        {

            break;

        }

    }

//尝试关闭wifi

    if(isOkWifi)

    {

        tryCloseMAC(wifiManager);

    }

    return mac;

}

==================================================================

2. 查询文件路径 /sys/class/net/wlan0/address

adb shell cat /sys/class/net/wlan0/address

98:6c:f5:10:96:c4

可是假设WIFI在本次开机期间从来没有打开过,返回的MAC地址是不同的(非实际的),例如以下:

cat /sys/class/net/wlan0/address

00:90:4c:11:22:33

演示样例代码:

String getMac() {

                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 e) {

                        e.printStackTrace();

                }

                return macSerial;

        }

==================================================================

3. 查询记录了MAC地址的文件“/proc/net/arp”,可是从測试结果看,返回的数据并非想要的Wifi Mac地址:

比方,手机实际的WIFI Mac地址是98:6c:f5:10:96:c4,但使用adb shell cat proc/net/arp返回的是:

cat proc/net/arp

IP address       HW type     Flags       HW address            Mask     Device

192.168.0.3      0x1         0x2         00:23:89:b9:1a:fd     *        wlan0

192.168.0.1      0x1         0x2         08:00:27:7c:65:5a     *        wlan0

Android 获取WIFI MAC地址的方法的更多相关文章

  1. 解决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的解决方法 ...

  2. 获取WiFi MAC地址总结【转】

    本文转载自:http://blog.csdn.net/crazyman2010/article/details/50464256 今天对MAC地址的获取做了一些学习,目前网上获取MAC地址的方法主要如 ...

  3. Android 获取手机Mac地址,手机名称

    /** * 获取手机mac地址<br/> * 错误返回12个0 */ public static String getMacAddress(Context context) { // 获取 ...

  4. 如何从MTK机器的NVRAM中获取WIFI mac地址

    在MTK的机器中,如果不用特定的工具烧写MAC地址,在开机后打开WIFI后会显示: "NVRAM WARNING: Err=0x10" 这就是没有烧写mac地址的原因,所以每次打开 ...

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

    最近一直在尝试着在Android上通过ndk用C++获取本机MAC地址,但是用ioctl(SIOCGIFHWADDR)时,一直返回值小于0,即获取不到接口信息.刚开始我以为是自己漏掉了哪些访问权限,所 ...

  6. BLE获取iphone mac地址的方法--【原创】

    本人用的BLE是TIcc2541,1.3.2协议栈 1.首先要说明的是,iphone手机将信息保护了,BLE设备读到的iphone地址是随机的,每次连接都会不同 2.下面我就具体说明如何查看手机的ma ...

  7. java获取服务器IP地址及MAC地址的方法

    这篇文章主要介绍了java编程实现获取机器IP地址及MAC地址的方法,实例分析了Java分别针对单网卡及多网卡的情况下获取服务器IP地址与MAC地址的相关技巧,需要的朋友可以参考下   本文实例讲述了 ...

  8. 读取Android设备的MAC地址

    读取Android设备的MAC地址   AndroidUtil.java package com.csdn.android.util; import com.csdn.android.framewor ...

  9. php/js获取客户端mac地址的实现代码

    这篇文章主要介绍了如何在php与js中分别获取客户度mac地址的方法,需要的朋友可以参考下   废话不多讲,直接上代码吧! 复制代码 代码如下: <?php   class MacAddr {  ...

随机推荐

  1. 自设chrome默认滚动条样式

    今天无聊,想着chrome这种全面使用html的浏览器,可不可以让我自行改变它的默认CSS呢,结果去查查,有,很好 win7/8目录为 C:\Users\[你的用户名]\AppData\Local\G ...

  2. IT新人养成与蘑菇理论

    (一)来源及定义    “蘑菇定律”最早是在上世纪70年代一批年轻的电脑程序员编写的.当时,美国一批电脑程序员意外发现,一批刚从学校毕业的新人参加了工作,这些人很难适应工作环境.在这种情况下,这些电脑 ...

  3. Js Carousel

    http://getbootstrap.com/javascript/#carousel http://owlgraphic.com/owlcarousel/#demo https://www.mob ...

  4. PYTHON之DEF

    def sayHello(): print('Hello World!') while True: s = input('Enter something : ') if s == 'quit': br ...

  5. UVA 10034 Freckles 最小生成树

    虽然是道普通的最小生成树题目,可还是中间出了不少问题,暴露的一个问题是不够细心,不够熟练.所以这篇博客就当记录一下bug吧. 代码一:kruskal #include<stdio.h> # ...

  6. ANDROID_MARS学习笔记_S02_015_Gson解析json串为对象集合

    package com.example.s02_e12_json3; import java.lang.reflect.Type; import java.util.Iterator; import ...

  7. TEA算法

    我们要讨论的最后一个分组密码加密算法是TEA(Tiny Encryption Algorithm).到目前为止,我们在前面所呈现的连线图可能会使你得出如下结论:分组密码加密算法必须是复杂的.TEA却能 ...

  8. 自定义滚轮效果选择器spinnerwheel的使用总结

    项目中有使用到像IOS滚轮效果的选择时间或数字的组件:android-spinnerwheel github地址:https://github.com/ai212983/android-spinner ...

  9. Android Density(密度)

    1.  什么是density 引用 1) density density表示每英寸有多少个显示点(逻辑值),它的单位是dpi:dot per inch,通常屏幕大时,density就大,屏幕小时,de ...

  10. 转载:浅谈Java多线程的同步问题【很好我就留下来,多分共享】

    转载:http://www.cnblogs.com/phinecos/archive/2010/03/13/1684877.html#undefined 多线程的同步依靠的是对象锁机制,synchro ...