WifiInfo.getBSSID()尽管电话已连接,但仅返回null

问题描述 投票:3回答:1

我需要找到我连接到的AP的MacAddress。做了一些研究,最后,我使用了以下线程的摘录:Wifi getSSID() returns null

代码看起来像这样:

String mac = "02:00:00:00:00:00";
WifiManager wifiMgr = (WifiManager) getApplicationContext().getSystemService(WIFI_SERVICE);
       while(mac.equals("02:00:00:00:00:00")) {
             WifiInfo wifiInfo = wifiMgr.getConnectionInfo();
             mac = wifiInfo.getBSSID();
             Log.d("Wifi", "WifiInfo : " + wifiInfo.toString());
          }
Log.d("Wifi", "YAY!" + mac);

(我这样写,所以如果由于某种原因它返回null,它将重做它直到返回其他东西,因为根据某些答案,它并不总是一致的。]

不幸的是,该输出始终为:D/Wifi: WifiInfo: SSID: , BSSID: 02:00:00:00:00:00, MAC: 02:00:00:00:00:00, Supplicant state: COMPLETED, RSSI: -74, Link speed: 58Mbps, Tx Link speed: 58Mbps, Rx Link speed: -1Mbps, Frequency: 2412MHz, Net ID: -1, Metered hint: false, GigaAp: false, VenueName: null, WifiMode: 4, HotspotLiveAp: false, score: 55

清单具有必要的权限(根据几个线程,可能缺少某些内容):

<uses-permission android:name = "android.permission.ACCESS_WIFI_STATE" android:required="true" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" android:required="true" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" android:required="true" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" android:required="true" />
<uses-permission android:name="android.permission.INTERNET" android:required="true" />

[要查看问题是否可能是外部的,我将WifiAnalyzer下载到我的手机上,但是它可以正确显示AP的mac在我附近以及我在运行我的应用程序时所连接的mac。在AP设置或其他任何内容中。

多线程讨论了相似的,如果不是相同的问题:Wifi getSSID() returns nullWhy WifiConfiguration.BSSID is always null?How to get BSSID of all wifi access points?

但是他们要么得不到答案,要么专注于问题的另一个方面,要么答案不起作用,而且它们都比较老。

TL; DR我想要手机连接到的AP的Mac地址,但getBSSID()始终返回null。

java android android-wifi wifimanager
1个回答
0
投票

嗯,结果答案不在代码中。无论您的权限如何,在android 10中,您都需要进入设置并允许您的应用访问位置,否则getBSSID()将返回“ 02:00:00:00:00:00”,因此如果您希望这样做您需要通过应用自动(而不是手动)自动添加权限弹出窗口,以更改设备设置。至于如何做到这一点,我肯定有教程,与此同时,我的问题也解决了。

© www.soinside.com 2019 - 2024. All rights reserved.