检查 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 中更改表