【问题标题】:Is BroadcastReceiver nescessary for a wifi scan?wifi扫描是否需要广播接收器?
【发布时间】:2018-10-04 01:20:53
【问题描述】:

这是我下面的代码,它工作正常,当我走进一个 wifi 环境时,我能够接收所有 wifi BSSID,当我走出去时,它返回 null。但是我看到了使用广播接收器的示例,是否需要 wifi 扫描?只是想确保我做得对

 public static String getBSSID(Context context){ /
    WifiManager wifiManager;
    List<ScanResult> results;
    List<String> ids = new ArrayList<>();
    wifiManager = (WifiManager)  context.getApplicationContext().getSystemService(Context.WIFI_SERVICE);

    String essidPrefix = MainFragment.configuration.getEssidPrefix();
    String bssid = null;

    results = wifiManager.getScanResults();
    for(ScanResult scanResult : results){
        String scanWifi = scanResult.SSID;
       if(scanWifi.startsWith(essidPrefix)){
          ids.add(scanResult.BSSID);
          bssid = TextUtils.join(",",ids);


       }

    }

    StatusActivity.addMessage(bssid);
    return bssid;

【问题讨论】:

    标签: java android android-studio android-wifi


    【解决方案1】:

    根据 android 文档,您为 SCAN_RESULTS_AVAILABLE_ACTION 注册了一个广播侦听器,该侦听器在扫描请求完成时调用,提供其成功/失败状态。 https://developer.android.com/guide/topics/connectivity/wifi-scan 因此,如果您想处理成功和失败的结果。

    至于使用getScanResult() go,文档明确提到返回的扫描结果是最近更新的结果,如果您当前的扫描尚未完成或成功,则可能来自先前的扫描。这意味着如果在接收到成功的SCAN_RESULTS_AVAILABLE_ACTION 广播之前调用此方法,您可能会得到较旧的扫描结果。所以这就是您需要 BroadcastReceiver 的原因,如果不使用它,您可能会看到过时或不是当前的结果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多