Ich versuche, Signalstärkeänderungen in einer Wifi-Verbindung zu erkennen. Ich bin verwirrt, welche Methode ich in meinem BroadcastReceiver verwenden sollte. Was ist der Unterschied zwischen der Verwendung von getConnectionInfo() und getScanResults() - von denen kann ich dann relevante Methode verwenden, um den rssi-Wert zu erhalten?Unterschied zwischen getConnectionInfo() und getScanResults(), um Signalstärkeänderungen zu erkennen
Zum Beispiel: wenn ich getConnectionInfo() verwende, dann benutze ich später getRssi(). Oder ich könnte getScanResults() und die Eigenschaft "level" verwenden.
Ich zeige ihre Werte mit Toast und es zeigt nicht immer die gleichen Werte. Wenn Wi-Fi-Verbindung verloren ist, zeigt die getConnectionInfo(). GetRssi() -200, während result.level immer noch seinen vorherigen Wert zeigt.
Irgendwelche Gedanken? Vielen Dank!
String netSSID = wifi.wifiMgr.getConnectionInfo().getSSID();
int netRSSI = wifi.wifiMgr.getConnectionInfo().getRssi();
List<ScanResult> results = wifi.wifiMgr.getScanResults();
for (ScanResult result : results) {
if (result.SSID.equalsIgnoreCase(netSSID)) {
anothernetRSSI = result.level;
}
}
* Bitte beachten Sie das Code-Snippet * Dort verwende ich diese beiden Methoden, um rssi Wert von der aktuellen Verbindung zu erkennen. Und ja, ich benutze startScan(). Ok, in diesem Fall ist es einfach nicht richtig getConnectionInfo(). GetRssi() zu verwenden? Wie wäre es, RSSI_CHANGED_ACTION zu senden und dann intent.getIntExtra (WifiManager.EXTRA_NEW_RSSI, 0) zu verwenden, um den neuen rssi-Wert zu erhalten? Ist das auch der Fall SCAN_RESULTS_AVAILABLE_ACTION, der Zugriffspunkte abruft? Es kann also den rssi-Wert eines anderen APs zurückgeben, solange der Wert von dem vorherigen abweicht. – springrolls
Laut einem Buch, das ich gerade gelesen habe, RSSI_CHANGED_ACTION gibt aktuelle RSSI von verbundenen WLAN-Netzwerk. So, jetzt in meinem Verständnis, können wir eine der drei Methoden verwenden, um RSSI-Änderungen anzuzeigen. Aber es gibt für jeden eine spezifische Bedingung: 1. Wenn Sie SCAN_RESULTS_AVAILABLE_ACTION übertragen (und damit startScan()), verwenden Sie getScanResults() und rufen Sie die Eigenschaft "level" für das Netzwerk ab, mit dem Sie gerade verbunden sind. 2. Verwenden Sie getConnectionInfo(). GetRssi() alle x Sekunden aktualisiert. 3. Oder wenn Sie RSSI_CHANGED_ACTION übertragen, verwenden Sie EXTRA_NEW_RSSI - was in meinem Fall besser dazu dienen sollte, rssi-Änderungen zu erkennen. – springrolls