检查ScanResult网络是否已经配置(存在于getConfiguredNetworks()列表中)

7
我需要检查由getScanResults()方法返回的每个网络是否已在设备中配置,也就是说,我需要检查它是否存在于getConfiguredNetworks()返回的列表中。问题在于:由于它们唯一的共同参数是SSID,所以我该如何做到这一点?我知道这不是一个好的方法,因为可能会有更多具有相同SSID的网络。 如参考中所述,networkId是用于识别此网络配置条目的ID号码,但是我无法找到与ScanResult对象类似的内容。 因此,如果我的接收器是这样的:
WifiManager wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);
registerReceiver(new BroadcastReceiver()
       {
           @Override
           public void onReceive(Context c, Intent intent) 
           {
              results = wifi.getScanResults();
              size = results.size();
           }
       }, new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION)); 

以下是我获取配置网络的方式:

List<WifiConfiguration> list = wifi.getConfiguredNetworks();

有没有办法检查list.get(i)是否对应于results.get(j)配置,无论是i还是j?
1个回答

4
您可以检查两个网络的BSSID是否匹配。ScanResult和WifiConfiguration均提供BSSID,该BSSID是网络独有的。

2
问题在于getConfiguredNetworks()对于bssid返回null。 - Ben
@Ben你所获得的BSSID为空值的情况只有以下两种可能:
  1. Wifi配置是手动保存的,且BSSID存储不正确
  2. Wifi管理器尚未准备好(这种情况很少发生,而且在非定制版本中不太可能出现)。
- Sreedevi J
+Sreedevi J 你说wifimanager还没准备好是什么意思?我从BSSID那里得到了null。 - x0a
如果是自定义构建,你可以改变顺序以便提前启动某些使用wifi管理器的组件。如果发生这种情况,则不能保证wifi服务已经准备好,此时需要从配置文件中读取和填充其wifi配置。这很少见,如果只是作为第三方构建apk,则不会发生。如果保存wifi配置(如“addNetwork”)但在连接成功时没有填充BSSID,则BSSID也可能为空。 - Sreedevi J

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