进行WLAN扫描是否需要BroadcastReceiver?

时间:2018-10-04 01:20:53

标签: java android android-studio android-wifi

这是我下面的代码,当我走进无法接收所有wifi BSSID的wifi环境时,它工作正常,当我走出去时,它返回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;

1 个答案:

答案 0 :(得分:0)

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

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