这是我下面的代码,当我走进无法接收所有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;
答案 0 :(得分:0)
根据android文档,您为SCAN_RESULTS_AVAILABLE_ACTION注册了一个广播侦听器,当扫描请求完成时会调用该侦听器,以提供其成功/失败状态。 https://developer.android.com/guide/topics/connectivity/wifi-scan 因此,如果您想处理成功和失败的结果。
对于使用getScanResult()
来说,文档中明确提到返回的扫描结果是最近更新的结果,如果您当前的扫描未完成或未成功,则可能来自先前的扫描。这意味着,如果在成功接收SCAN_RESULTS_AVAILABLE_ACTION
广播之前调用此方法,则可能会得到较旧的扫描结果。因此,这就是为什么需要BroadcastReceiver的原因,如果不使用它,您可能会看到陈旧的或不是最新的结果。