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. source insight添加汇编文件.s

    (1) 做ARM嵌入式开发时,有时得整汇编代码,但在SIS里建立PROJECT并ADD TREE的时候,根据默认设置并不会把该TREE里面所有汇编文件都包含进来,默认只加了.inc和.asm后缀的, ...

  2. caller和callee的区别

    ①.caller caller返回一个函数的引用,这个函数调用了当前的函数. 使用这个属性要注意: 1 这个属性只有当函数在执行时才有用 2 如果在javascript程序中,函数是由顶层调用的,则返 ...

  3. Stanford Parser学习入门(3)-标记

    以下是Stanford parser中的标记中文释义供参考. probabilistic context-free grammar(PCFG)     ROOT:要处理文本的语句 IP:简单从句 NP ...

  4. JavaWeb学习总结(一)——JavaWeb开发入门(转载)

    转载自http://www.cnblogs.com/xdp-gacl/p/3729033.html感谢孤傲苍狼的分享. 一.基本概念 1.1.WEB开发的相关知识 WEB,在英语中web即表示网页的意 ...

  5. mysql优化案例

    MySQL优化案例 Mysql5.1大表分区效率测试 Mysql5.1大表分区效率测试MySQL | add at 2009-03-27 12:29:31 by PConline | view:60, ...

  6. SaltStack的salt-api里如何指定用户执行cmd.script

    在杨威的协助下,命令行,API调用都完美搞定. 主要是RUNAS参数的位置,以及它作为CURL POST -D DATA的使用. salt '1.2.3.4' cmd.script "sal ...

  7. 利用TEA算法进行数据加密

    TEA(Tiny Encryption Algorithm)是一种小型的对称加密解密算法,最初是由剑桥计算机实验室的 David Wheeler 和 Roger Needham 在 1994 年设计. ...

  8. 当函数没有return时错误

    error:control reaches end of non-void function 在对应函数+return   :  即可

  9. windows桌面添加右键环境

    1.组合键win + R,输入regedit,回车   打开注册表编辑器 2.找到目录中[HKEY_CLASSES_ROOT\Directory\Background\shell]对其右键,新建一个项 ...

  10. cssViewer牛逼的chrome插件

    很牛逼,功能很强大.