WifiManager.getScanResults() - 澄清(自动扫描,睡眠等)

时间:2013-04-21 23:20:53

标签: android android-wifi android-wireless

我想澄清WifiManager.getScanResults()的行为,即:

启用无线时

  1. android会在固定的时间间隔内扫描接入点吗?可以查询/更改间隔吗?可以查询上次扫描的时间吗?有关讨论,请参阅此answer
  2. 当无线广播关闭(休眠)时会发生什么 - 当仍然启用wifi时 - getScanResults()会继续返回上次扫描结果吗?怎么会知道startScan()的时间?
  3. 禁用无线时

    1. getScanResults()会返回上次扫描结果吗?还是一个空列表?或者null(它确实有时会返回null,并且这不是由SO中发布的90%的片段处理的)?
    2. 即使重新启动(手机启动时关闭了wifi),1的答案也是如此?
    3. 我问的原因是我需要定期获取可用接入点的列表,我宁愿立即致电getScanResults(),而不是WifiManager.startScan()然后getScanResults()如果我真的不必 - 因为这涉及获取wifi锁等,而且相当微妙。我不确定API级别和手机硬件能发挥多大作用。

      有关困难的详细讨论,请参阅此answer

2 个答案:

答案 0 :(得分:3)

禁用无线时

  1. getScanResults()将返回null ...
  2. ...即使重新启动(这是预期的 - 如果它首先没有返回null,这将是有争议的)
  3. 启用无线时

    2.令人惊讶的是getScanResults()会在一段时间后返回null(在Nexus One,Android 2.3.7,Cyanogen mod上 - 但我怀疑这不是真的相关)。所以是的,显然无论无线状态如何,都必须启动扫描

    如果状态是WIFI_STATE_DISABLING

    ,我想也是如此

    在无线启用的情况下我仍然感兴趣 - 特别是问题2,如果设备处于睡眠状态。 Google网上论坛不会让我发帖(提示)

答案 1 :(得分:-2)

  

public List getScanResults()

API LEVEL 1

中添加

返回最新接入点扫描的结果。

返回 最近扫描中找到的访问点列表。应用必须拥有ACCESS_COARSE_LOCATIONACCESS_FINE_LOCATION权限才能获得有效结果。