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. NotePad++更改背景颜色

    白色的编辑框看得眼睛不舒服,怎么样更改NotePad++的背景颜色使眼睛更舒服些? 1.设置--语言格式设置 2.设置背景色 “背景色”一栏,选择背景色颜色   “使用全局背景色”一栏要打上√,否则无 ...

  2. PHP利器-WAMPServer

    为了配置memcacheAdmin,牵涉到搭建PHP的环境,使用的是WAMPServer,安装之后,需要对apache进行配置, 端口,需要将wamp\bin\apache\Apache2.2.21\ ...

  3. TCP/IP入门学习(1)---分层概述

    本文旨在记述一些学习中的笔记 OSI分层:应用层,表示层,会话层,传输层,网络层,数据链路层,物理层 详细点: 1.应用层:为应用程序提供服务并规定程序中通信相关细节. 2.表示层:将应用处理的信息转 ...

  4. 【网络流24题】No.19 负载平衡问题 (费用流)

    [题意] G 公司有 n 个沿铁路运输线环形排列的仓库, 每个仓库存储的货物数量不等. 如何用最少搬运量可以使 n 个仓库的库存数量相同.搬运货物时,只能在相邻的仓库之间搬运. 输入文件示例input ...

  5. 【HDOJ】3234 Exclusive-OR

    并查集.对于对元素赋值操作,更改为I p n v.令val[n]=0(任何数与0异或仍为原值).考虑fa[x] = fx, fa[y] = fy.如果使得fa[fx] = fy, 那么val[fx] ...

  6. bzoj2186

    首先我们看到题目要求的是1~N!内有M!互质的个数 N!>M!,而我们是知道在M!以内与M!互质的数的个数,即phi(M!) 但是M!~N!内与M!互质的数有多少个呢? 对于每个互质的数,如果我 ...

  7. bzoj1927

    看到这道题不难想到费用流吧,但是怎么做呢? 一开始看到“每个点都恰好走一次”,我首先想到的有下界最小费用流, 然后发现这没有满足最大流的条件,然后又连边松弛掉多余的流 为了按照可行流的做法先减减去极大 ...

  8. strncpy 用法

    strncpy   用法 原型:extern char *strncpy(char *dest, char *src, int n); 用法:#include <string.h> 功能: ...

  9. 卸载系统自带的JDK的脚本并再次安装

    卸载系统自带的JDK的脚本并安装1.6.0.32版本的jdk #!/bin/bash homefile=/usr/local/java cd $homefile homelist=`sudo rpm ...

  10. JavaScript高级程序设计58.pdf

    15章 使用Canvas绘图 略 16章 HTML5脚本编程 HTML5规范了新的HTML标记和JavaScript API,以便简化创建动态Web界面的工作 跨文档消息传递 简称XDM,指来自不同域 ...