在另一个方法调用完成后,如何从一个方法返回?

问题描述

我正在Flutter中构建一个android应用,我想在其中扫描WiFi网络并在扫描完成时返回扫描结果。

我在Dart代码和Java代码之间通过MethodChannel调用的当前方法如下:

public List<ScanResult> getScanWifiResult(){

if (WifiManager != null && WifiManager.getScanResults() != null && WifiManager.getScanResults().size() > 0) {
    return WifiManager.getScanResults();
}
    return null;
}

方法返回List ,这是我想要的。现在,我需要此方法WifiManager.startScan()完成后返回。

我见过人们使用broadcastReceiver,但是我不知道如何才能使我的方法仅在此broadcastReceiver完成后才返回。这是我开始broadcastReceiver设置的开始。

public List<ScanResult> getScanWifiResult(){
    registerReceiver(wifiReceiver,new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
    wifiManager.startScan();

    //Here I need to return wifiManager.getScanResults(); once the broadcastReceiver is finished. 
    //return wifiManager.getScanResults();
  }


broadcastReceiver wifiReceiver = new broadcastReceiver() {
@Override
public void onReceive(Context context,Intent intent) {
    results = wifiManager.getScanResults();
    unregisterReceiver(this);
};
}

broadcastReceiver完成后,如何从该方法返回?

我有权使用WifiManager.getScanResults所需的权限。我可以同时运行WifiManager.getScanResults和WifiManager.startScan而没有权限问题。

更新! 我无法简单地等到wifiManager.getScanResult返回数据,因为我将保存最近执行的扫描的数据。此外,我开始的扫描可能会返回null,这也可以。我只希望结果与我开始的扫描相同。

解决方法

您可以在代码中的任何地方尝试这种方式以获取扫描结果,您必须在清单中要求gps位置权限

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

在清单中添加权限后

List<ScanResult> foundedNetwork;
foundedNetwork = wifiManager.getScanResults();
foundedNetwork.SSID;
foundedNetwork.BSSID; 
foundedNetwork.level;