设备MAC地址获取-当wifi关闭时

7

我正在使用以下代码查找Android设备的MAC地址:

WifiManager manager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
WifiInfo info = manager.getConnectionInfo();
String address = info.getMacAddress());

但在这种情况下,当Wifi关闭时我无法获取MAC地址。如何在WIFI关闭时获取Android设备的MAC地址。

谢谢


如果WiFi关闭,您将无法获取MAC地址,在这种情况下,您可以使用设备ID,该ID对于所有设备都是唯一的。 - user2060383
1个回答

14

如果获取MAC地址非常重要,为什么不在获取MAC地址时短暂启用Wifi,然后在获取完MAC地址后将其禁用呢?

当然,这样做是未经测试的。

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

if(wifiManager.isWifiEnabled()) {
    // WIFI ALREADY ENABLED. GRAB THE MAC ADDRESS HERE
    WifiInfo info = wifiManager.getConnectionInfo();
    String address = info.getMacAddress();
} else {
    // ENABLE THE WIFI FIRST
    wifiManager.setWifiEnabled(true);

    // WIFI IS NOW ENABLED. GRAB THE MAC ADDRESS HERE
    WifiInfo info = wifiManager.getConnectionInfo();
    String address = info.getMacAddress();
}

您将需要在清单文件中设置这些权限

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
<uses-permission android:name="android.permission.UPDATE_DEVICE_STATS"></uses-permission>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>

我不确定在这种情况下是否需要UPDATE_DEVICE_STATS权限。请在决定是否保留它之前尝试一下。


2
我认为如果WiFi已经启用,您不应该禁用它。而且似乎UPDATE_DEVICE_STATS也是不必要的。 - Tine M.
UPDATE_DEVICE_STATS 权限仅授予系统应用程序。 - euniceadu
为什么需要打开设备的WIFI才能获取其MAC地址? - MikeL
@MichaelLiberman:第一次使用时,大多数教程建议打开WiFi。不一定连接到网络,但仍应启用。此外,我在不同设备上禁用WiFi时得到了混合结果。所以,我坚持使用它。另外(再次强调),如代码前所述,它未经测试。我在放置代码时远离了我的办公室电脑。逻辑总是正确的。 - Siddharth Lele
@MichaelLiberman:发现了一个安卓博客(它深深埋藏在我的书签中),该博客提到了同样的问题。识别应用程序的安装。滚动到标题为Mac地址的部分,它基本上说的是一样的。希望这可以帮助你。;-) - Siddharth Lele

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接