指点成金-最美分享吧

登录

android 设备如何获取mac地址吗

佚名 举报

篇首语:本文由小编为大家整理,主要介绍了android 设备如何获取mac地址吗相关的知识,希望对你有一定的参考价值。

获取mac地址的话,可以在命令行窗口获取,代码如下:
android 底层是 Linux,我们还是用Linux的方法来获取:
1 cpu号:
文件在: /proc/cpuinfo
通过Adb shell 查看:
adb shell cat /proc/cpuinfo
2 mac 地址
文件路径 /sys/class/net/wlan0/address
adb shell cat /sys/class/net/wlan0/address
xx:xx:xx:xx:xx:aa

具体的实现代码为:
public static String getLocalMac()
String mac=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)

mac = str.trim();// 去空格
break;


catch (IOException ex)
// 赋予默认值
ex.printStackTrace();

return mac;

参考技术A (1) 调用android 的API: NetworkInterface. getHardwareAddress ()
该API的level为9,只有android 2.3以上才有该接口
(2) 调用java 的方法: nbtstat/arp
一般android不支持这两个命令
(3) 调用Android的API: WifiManager
权限:


代码:
WifiManager wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE); WifiInfo info = wifi.getConnectionInfo(); return info.getMacAddress();

这个是设备开通Wifi连接,获取到网卡的MAC地址

获取没有Wifi的android设备的MAC地址

【中文标题】获取没有Wifi的android设备的MAC地址【英文标题】:Get MAC Address of android device without Wifi 【发布时间】:2011-09-05 17:12:31 【问题描述】:

如何获取没有 Wifi 接口的安卓设备(例如安卓模拟器)的网络接口的 MAC 地址?通过WifiManager获取的WifiInfo返回null

编辑

更清楚地说:我必须与本地网络上的现有网络协议(不是我设计的)通信,我必须在注册阶段在有效负载中发送通信接口的 mac 地址。

【问题讨论】:

我编辑我的问题更清楚 外部设备无论如何都无法看到真实的mac地址,因为有一个NAT(PC)在路上,那么发现它和制作一个(使用本地管理位)向上? 这仅适用于模拟器。带有以太网接口(有线网络)的安卓设备呢? 事实证明,该协议并没有明确要求有效的 MAC 地址,而是唯一的标识符。一个现有的实现只是使用 mac-address 作为这个标识符,这就是为什么我认为它是必要的。这就是为什么 Alexander Lucas 关于唯一标识符的回答最适合我的情况。但是我认为获取非 wifi 设备的 mac 地址的问题对其他人来说可能仍然很有趣,这就是为什么我将 Chris Stratton 的答案标记为最佳。 我在这里发布了工作解决方案***.com/a/47789324/5330408 【参考方案1】:

使用 adb 获取 android 设备的 wifi MAC:adb shell getprop ril.wifi_macaddr

在 Java 中使用以下代码以编程方式获取它:

Process p = Runtime.getRuntime.exec("adb", "shell", "getprop", "ril.wifi_macaddr")BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream());String macAddress = br.readLine();

【讨论】:

【参考方案2】:

See this post 我已经提交了 Utils.java 示例以提供纯 java 实现。

Utils.getMACAddress("wlan0");Utils.getMACAddress("eth0");Utils.getIPAddress(true); // IPv4Utils.getIPAddress(false); // IPv6 

【讨论】:

不!获取wifi mac地址。我必须使用这种方法至少打开一次 wifi。当我在设备刚启动后使用Utils.getMACAddress("wlan0"); 时,它会返回一个假地址。【参考方案3】:

将 /sys/class/net/[something]/address 读取为文本文件

但按照你的想法,它不太可能有用。

【讨论】:

对我来说,如果我用“eth0”替换 [something] 就可以了。非常感谢分享这个。 它“不太可能有用”的原因是 Android 设备通常位于 NAT 之后,这使得它们的实际客户端 MAC 地址无关紧要 - 您可以提供任何随机数,在会话中持续存在或不在您的偏好。【参考方案4】:

我将迈出一大步,假设您需要此 MAC 地址来为设备建立唯一标识符。 Mac 地址不是这样做的方法。

有一篇题为“Identifying App Installations”的 Android 开发者博客文章很好地涵盖了生成唯一 ID 的主题,包括流行的方法和优缺点。这绝对值得一读。与这篇文章非常相关的是以下引用:

也许可以从设备的 WiFi 或蓝牙硬件中检索 Mac 地址。我们不建议将其用作唯一标识符。首先,并非所有设备都有 WiFi。另外,如果 WiFi 没有打开,硬件可能不会报告 Mac 地址。

您可以使用的选项包括 TelephonyManager.getDeviceId()、android.os.Build.SERIAL 和 Settings.Secure.ANDROID_ID,所有这些都在链接的帖子中进行了更详细的介绍。

【讨论】:

对不起,这不适用于我所需要的。我必须与现有协议(不是我实现的)通信,在注册阶段我必须在有效负载中发送我的本地 MAC 地址。 android.os.Build.SERIAL 仅适用于 Android 2.3 及更高版本。 非常感谢您的回复:正是我需要的。【参考方案5】:

您想要 MAC 地址的网络接口是什么?如果没有wifi,你肯定无法获取wifi设备的MAC地址。它代表物理硬件,如果不存在,它就根本不存在。

【讨论】:

是的,wifi接口的mac地址根本不存在。但问题是如何获取最终发送消息的接口的 MAC 地址(例如,可能是以太网接口或模拟器上的虚拟接口)。

以上是关于android 设备如何获取mac地址吗的主要内容,如果未能解决你的问题,请参考以下文章