#java #android #flutter #broadcastreceiver #wifimanager
#java #Android #флаттер #broadcastreceiver #wifimanager
Вопрос:
Я создаю приложение для Android в Flutter, где я хочу сканировать сети Wi-Fi и возвращать результат сканирования после его завершения.
Текущий метод, который я вызываю через MethodChannel между моим кодом Dart и кодом Java, выглядит следующим образом:
public List<ScanResult> getScanWifiResult(){
if (WifiManager != null amp;amp; WifiManager.getScanResults() != null amp;amp; WifiManager.getScanResults().size() > 0) {
return WifiManager.getScanResults();
}
return null;
}
Метод возвращает List<ScanResult>, что я и хочу. Теперь мне нужно, чтобы этот метод возвращался после WifiManager.startScan()
завершения.
Я видел людей, использующих a 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, что тоже нормально. Я просто хочу получить результат при том же сканировании, которое я запускаю.
Ответ №1:
вы можете попробовать этот способ в любом месте вашего кода для scanresult вы должны запросить разрешение местоположения gps в своем манифесте
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
После добавления разрешения в ваш манифест
List<ScanResult> foundedNetwork;
foundedNetwork = wifiManager.getScanResults();
foundedNetwork.SSID;
foundedNetwork.BSSID;
foundedNetwork.level;
Комментарии:
1. Я могу получить результаты из WifiManager.getScanResults() просто отлично. Проблема в том, что WifiManager.getScanResults() возвращает результаты последнего сканирования. Я хочу завершить новое сканирование перед повторным вызовом WifiManager.getScanResults() .
2. вы можете проверить список, содержит ли он data или null. если у него есть какие-то данные, это означает, что WifiManager.getScanResult завершен
3. Я не могу этого сделать в этом случае. WifiManager.getScanResult содержит данные последнего выполненного сканирования. Таким образом, он может содержать данные, также может быть null. Я не хочу иметь данные из последнего выполненного сканирования, а скорее данные из конкретного сканирования, которое я вызываю.