2016-03-28 6 views
2

Ich habe wifiManager.startScan() verwendet; um die Daten von Wi-Fi-Access-Points in der Nähe zu erhalten. Dies wird als eine Liste von ScanResult zurückgegeben. Diese Klasse ist hier zu finden: http://developer.android.com/reference/android/net/wifi/ScanResult.html#timestampAndroid ScanResult Timestamp Feld - Wie genau ist es?

Ich verstehe, dass das Zeitstempelfeld von ScanResult

ist

Zeitstempel in Mikrosekunden (seit Start), wenn dieses Ergebnis wurde zuletzt gesehen.

So verwende ich einige Berechnungen den tatsächlichen Zeitstempel, wenn der Access Point erhalten wurde von der Smartphone-Gerät gesehen:

long actualTimestamp = System.currentTimeMillis() - SystemClock.elapsedRealtime() + (scanResult.timestamp/1000); 

Dies funktioniert gut, aber ich habe einige seltene interessante Ergebnisse mit :

15:04:01 28-03-2016 - 1459173841

22:50:44 07-06-2016 - 146533624 4

15.04.21 28-03-2016 - 1459173861

Hinweis über den Eintrag für Juni 2016, ein Datum in der Zukunft, die unter den anderen Messwerten gelegt wird gesammelt aus der Liste .

Was könnte hier passieren? Ist mein Code etwas falsch? Ist der Zeitstempelwert gelegentlich ungenau? Hat das schon mal jemand erlebt?

Edit: Ich teste dies auf Nexus 5 Marshmallow-Gerät. MinSDK 18, Target 23

+0

ich einige Ergebnisse bekommen, die ich entweder nicht trauen. Ich versuche Ergebnisse zu filtern, die älter als X ms sind, aber ich bin mir ziemlich sicher, dass dies zu einer Liste führt, die Scanresults enthält, die nicht vorhanden sein sollten oder eine falsche Signalstärke enthalten (meine App versucht den besten Access Point zu finden) wählt immer APs, die * die besten waren, bevor ich mich auf ein anderes zubewegte), was mich zu der Annahme verleitet, dass der Signalpegel und der Zeitstempel nicht übereinstimmen. – REJH

+0

Kommen Sie, um darüber nachzudenken .. vielleicht ein Problem auf dem AOSP-Bug-Tracker darüber zu schaffen? – REJH

+0

@REJH seit diesem Post konnte ich das Problem an einem Telefon hauptsächlich durch das Bewegen (Gehen, Fahren ect) replizieren. Der Zeitstempel würde in der Zukunft liegen. Auf einem anderen Gerät würde ein Zeitstempel in den Ergebnissen verbleiben, nie entfernt werden, was bedeuten würde, dass er immer veraltet wäre. Es ist sicher anzunehmen, dass wir nicht allen Ergebnissen vertrauen können - aber wir können sie herausfiltern. Zeichnen Sie auf, wenn Sie den Scan starten, und wenn er endet, wählen Sie nur Ergebnisse aus, die zwischen diesem Zeitraum liegen. – Jonty800

Antwort

1

Ich habe anscheinend eine Erklärung: Das ist ein Fehler.

Ich sehe, dass gelegentlich .timestamp (Mikrosekunden seit Neustart) wird gleich .seen (Sekunden seit Epoch). Heutzutage beträgt die Epochenzeit ungefähr 17 Tage, wenn sie als Mikrosekundenperiode neu interpretiert wird.

Da zwei Werte eindeutig nicht gleich sein können, legte ich es auf Android: https://code.google.com/p/android/issues/detail?id=225218 Fühlen Sie sich frei um das Problem zu star :)