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();
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地址的方法的更多相关文章
- 解决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的解决方法 ...
- 获取WiFi MAC地址总结【转】
本文转载自:http://blog.csdn.net/crazyman2010/article/details/50464256 今天对MAC地址的获取做了一些学习,目前网上获取MAC地址的方法主要如 ...
- Android 获取手机Mac地址,手机名称
/** * 获取手机mac地址<br/> * 错误返回12个0 */ public static String getMacAddress(Context context) { // 获取 ...
- 如何从MTK机器的NVRAM中获取WIFI mac地址
在MTK的机器中,如果不用特定的工具烧写MAC地址,在开机后打开WIFI后会显示: "NVRAM WARNING: Err=0x10" 这就是没有烧写mac地址的原因,所以每次打开 ...
- Android获取wifi MAC,关闭的wifi不能获取
最近一直在尝试着在Android上通过ndk用C++获取本机MAC地址,但是用ioctl(SIOCGIFHWADDR)时,一直返回值小于0,即获取不到接口信息.刚开始我以为是自己漏掉了哪些访问权限,所 ...
- BLE获取iphone mac地址的方法--【原创】
本人用的BLE是TIcc2541,1.3.2协议栈 1.首先要说明的是,iphone手机将信息保护了,BLE设备读到的iphone地址是随机的,每次连接都会不同 2.下面我就具体说明如何查看手机的ma ...
- java获取服务器IP地址及MAC地址的方法
这篇文章主要介绍了java编程实现获取机器IP地址及MAC地址的方法,实例分析了Java分别针对单网卡及多网卡的情况下获取服务器IP地址与MAC地址的相关技巧,需要的朋友可以参考下 本文实例讲述了 ...
- 读取Android设备的MAC地址
读取Android设备的MAC地址 AndroidUtil.java package com.csdn.android.util; import com.csdn.android.framewor ...
- php/js获取客户端mac地址的实现代码
这篇文章主要介绍了如何在php与js中分别获取客户度mac地址的方法,需要的朋友可以参考下 废话不多讲,直接上代码吧! 复制代码 代码如下: <?php class MacAddr { ...
随机推荐
- SQL Server 2012 Features
SQL SQL Server 2012 新增加的几个函数: SELECT CONVERT (INT, 'Angkor-216.00') 直接报错 SELECT TRY_CONVERT(INT, 'SS ...
- bzoj 3160: 万径人踪灭 manachar + FFT
3160: 万径人踪灭 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 133 Solved: 80[Submit][Status][Discuss] ...
- bzoj 1914: [Usaco2010 OPen]Triangle Counting 数三角形 容斥
1914: [Usaco2010 OPen]Triangle Counting 数三角形 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 272 Sol ...
- 12306 订票助手 C# 版
闲着没事,也用C#写了一个12306的订票助手,虽然可能会有些BUG但是也能正常使用了下载地址:http://www.fishlee.net/soft/12306_helper/ 查票窗口,可以查询余 ...
- 【技术贴】webservice 调用 Transport error : 401 Error:Una
解决 webservice 调用之后报错:调用异常:Transport error : 401 Error:Unauthorized 授权失败. 加入如下代码 //Sap需要ws-security的认 ...
- hdu 4111 Alice and Bob
组合游戏题: 组合游戏的规则: 1.必败态的所有后继都是必胜态: 2.必胜态最少有一个必败的后继: 这里的必胜态是f[1][0][0][0]; 其中f[a][b][c][d]表示有a个1,b个2,c个 ...
- Ubuntu使用wget下载jdk问题
使用以下命令可下载成功,否则下载下来的可能是一个html文档. wget --no-cookies --no-check-certificate --header "Cookie:gpw_e ...
- 用 NSURProtocol 注入测试数据
在之前的几篇博文中,笔者介绍过访问异步网络的单元测试方法及如何使用模拟对象来进一步控制单元测试的范围.在今天的教程中,笔者将展示另一种方法,即:通过自定义 NSURProtocol 类来获取静态测试数 ...
- OA学习笔记-001-项目介绍
基本知识 框架工具 解决方案(经典应用) 项目 12天 ========================================== OA项目, 12天 BBS 一.什么是OA? 辅助管理.提 ...
- 一起啃PRML - 1.1 Example: Polynomial Curve Fitting 多项式曲线拟合
一起啃PRML - 1.1 Example: Polynomial Curve Fitting @copyright 转载请注明出处 http://www.cnblogs.com/chxer/ 前言: ...