Gibt es eine Möglichkeit, WLAN-Scanintervalle in Android explizit zu steuern?

9

Ich mache gerade meine Masterarbeit über WiFi-Positionierung und um meine Algorithmen zu testen, musste ich einige Daten sammeln.

Dafür habe ich ein kurzes und sehr einfaches Programm für Android geschrieben, das einfach den RSSI für alle bei jedem Scan verfügbaren Zugriffspunkte sammelt und in Datei speichert. Ich habe ein BroadcastReceiver eingerichtet, das auf das Ereignis WifiManager.SCAN_RESULTS_AVAILABLE_ACTION wartet, und ich benutze ein Timer , hier tim genannt, um Scans mit einem WifiManager , genannt wifi, wie folgt einzuleiten:

%Vor%

Das Problem, das ich jetzt habe, ist, dass die eingeleiteten Scans nicht jede Sekunde passieren, selbst wenn es mir gelingt, sie zu initiieren, und ab und zu gibt es andere Scans, die von einer anderen App initiiert werden.

Gibt es eine einfache Möglichkeit, in einem festgelegten Intervall zu scannen und die von einer anderen App initiierten Scans nicht zu empfangen?

Die ganze App kann auf Ссылка gefunden werden, wenn es in irgendeiner Weise hilft.

    
while 14.12.2012, 20:27
quelle

1 Antwort

4
  

Gibt es eine einfache Möglichkeit, nach einem festgelegten Intervall zu scannen?

Wenn das nicht gut funktioniert, habe ich keine Angst. Aus meiner Erfahrung funktionieren "hardwarebezogene" Methoden möglicherweise nicht genau so, wie ihre Definition sagt. Zum Beispiel habe ich einmal eine kleine App erstellt, die alle X Minuten Ihre Position aufzeichnet. Also rufe ich requestLocationUpdates mit einigen minTime Parameter auf. Aber mein Telefon ignoriert einfach den minTime Wert, und ich bekomme Updates vom GPS, sobald sie verfügbar sind, was ich nicht wollte. Ich habe hier eine Frage dazu gestellt und habe diese Antwort erhalten, aus der wir erfahren, dass Geräte vor Jelly Bean einfach funktionieren können ignoriere diesen Wert ...

Also kann es jetzt etwas ähnliches sein. Ich würde versuchen, diesen Code auf der neuesten Android-Version auszuführen. Und ich verstehe nicht so viel in Wifi, aber ist nicht 1 Sekunde ein zu häufiges Intervall für Scans? Vielleicht ignoriert das System die Scan-Anfrage nicht (also gibt es true zurück), aber die Hardware tut das?

  

Können wir die von einer anderen App initiierten Scans ignorieren?

Soweit ich weiß, ist es auch hier negativ. In der SCAN_RESULTS_AVAILABLE_ACTION broadcast sind keine Extras enthalten, sodass Sie nicht wissen können, von welcher App der Scan gestartet wurde.

Die beste Lösung wird sein, Ihre Anforderungen zu erfüllen. Sie können ScanResult.timestamp verwenden, um zu bestimmen, ob Sie dieses Ergebnis verwenden sollen oder nicht. Wenn Sie beispielsweise versuchen, die RSSI für jeden Zugriffspunkt pro Sekunde zu ermitteln, können Sie die aktuelle BSSID mit früheren BSSIDs vergleichen. Wenn die aktuelle BSSID in einem Scanergebnis der letzten Sekunde enthalten war, können Sie sie einfach ignorieren. Dann ist es egal, wie viele Ergebnisse Sie erhalten.

Eine andere, viel einfachere Lösung wird sein, einen booleschen Wert namens scanInitiated zu erstellen und ihn beim Starten eines Scans auf true zu setzen. Wenn Sie den Broacast erhalten, verwenden Sie die Daten nur, wenn scanInitiated % true ist, und setzen Sie sie dann auf false . Dies ist nicht so zuverlässig, wenn die Intervalle kurz sind, aber für lange Intervalle wird es gut funktionieren.

    
Jong 14.12.2012, 21:27
quelle

Tags und Links