WifiInfo.getBSSID()返回null,尽管手机已连接。

3
我需要找到我连接的AP的Mac地址。做了一些研究,最终我使用了以下线程中的片段来完成这个任务: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地址以及当我运行我的应用程序时所连接的那个AP的mac地址,因此问题不可能出现在AP设置或其他任何地方。
多个帖子讨论了类似的问题,如果不是完全相同的问题: Wifi getSSID() 返回 null 为什么 WifiConfiguration.BSSID 总是 null? 如何获取所有 wifi 接入点的 BSSID? 但它们要么没有得到解答,要么关注问题的不同方面,或者答案不起作用,而且它们都比较旧。
简而言之,我想要知道手机连接的AP的mac地址,但是 getBSSID() 总是返回 null。
1个回答

0

好吧,事实证明答案不在代码中。无论您拥有何种权限,在Android 10中,您需要进入设置并允许您的应用程序访问位置,否则getBSSID()将返回“02:00:00:00:00:00”,因此,如果您希望自动完成此操作通过应用程序而不是手动进行设置,您需要添加权限弹出窗口,该窗口将更改设备设置。至于如何做到这一点,我相信有教程,与此同时,我的问题已得到解决。


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