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

Posted

技术标签:

【中文标题】检查 ScanResult 网络是不是已配置(存在于 getConfiguredNetworks() 列表中)【英文标题】:Check if ScanResult network is already configured (exists in getConfiguredNetworks() list)检查 ScanResult 网络是否已配置(存在于 getConfiguredNetworks() 列表中) 【发布时间】:2013-08-07 05:48:22 【问题描述】:

我需要检查 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】:

您可以检查两个网络的 BSSID 是否匹配。 ScanResult 和 WifiConfiguration 都提供了一个网络唯一的 BSSID。

【讨论】:

问题是getConfiguredNetworks()为bssid返回null @Ben BSSID 为空的唯一情况是: 1. 手动保存了 wifi 配置并且 bssid 存储不正确 2. wifimanager 尚未准备好(这种情况很少发生且不太可能发生在非自定义版本中。 +Sreedevi J wifimanager 还没有准备好是什么意思?我也从 BSSID 得到空值 @x0a 在自定义构建的情况下,您可以更改顺序以尽早开始使用 wifi 管理器的某些组件。如果发生这种情况,则不能保证 wifi 服务会启动,从 conf 文件中读取并填充它的 wifi 配置。如果您只是作为第三方构建 apk,这种情况很少见,并且不会发生。如果您正在保存 wifi 配置(例如“addNetwork”)并且在成功建立连接时不填充 BSSID,则 BSSID 也可以为空。

以上是关于检查 ScanResult 网络是不是已配置(存在于 getConfiguredNetworks() 列表中)的主要内容,如果未能解决你的问题,请参考以下文章

检查列是不是已存在,如果不存在,则在 sqlite 中更改表

检查用户是不是已存在于 localStorage

检查行是不是已存在如果不存在则插入行否则显示消息

如何检查 AWS S3 中是不是已存在存储桶

使用 Python 检查标签是不是已存在于 Adwords 帐户中?

使用 MySQLi 检查用户名是不是已存在