2010-12-07 3 views
6

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; 
    } 
} 

Antwort

1

Sie verwenden getScanResults() nur, wenn Sie startScan() verwenden. Ein Scan ist asynchron und sendet eine SCAN_RESULTS_AVAILABLE_ACTION Sendung, wenn sie abgeschlossen ist. Und die Scan-Ergebnisse werden für alle Zugriffspunkte, die der Scan findet, gefunden, die Zugriffspunkte enthalten können, die nicht mit denen verbunden sind, mit denen Sie verbunden sind, wenn Sie mit irgendetwas verbunden sind.

+0

* 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

+0

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

2

In einem Wort ist RSSI nur zwischen Ihrem Gerät und dem Access Point verfügbar, mit dem Sie verbunden sind. (RSSi ist die Signalstärke eines Access Points, mit dem Sie verbunden sind)

Wenn Sie jedoch das Niveau aller WLAN-Zugriffspunkte erreichen möchten, sollten Sie startScan verwenden und scanResult abrufen und die Level-Eigenschaft für jedes Gerät abrufen im Bereich WLAN Zugangspunkt.

ist das nützlich?

Verwandte Themen