Ohne GPS kann die eigene Position anhand von WLAN-Netzen und Handy-Zellen im Empfangsbereich geschätzt werden. Hierzu müssen lediglich die Geokoordinaten der Sender mit ihrer weltweit eindeutigen Kennung bekannt sein. Über eine ausreichend gut gefüllte Datenbank können die Identifikationsnummern der WLAN-Netze und Handyzellen in grobe Geokoordinaten übersetzt werden.
Nicht nur Androidgerätenutzer helfen gemeinschaftlich beim Verzeichnen der WLAN-Netze und Handy-Zellen. Um die notwendige Datenbasis zu schaffen, läßt u.a. Google die Geoposition seiner Androiden samt empfangener WLAN-Adressen und Basisstationskennungen nach Hause funken. Wer die Lokalisierung per Netz nutzen will, muss der anonymisierten Übermittlung der gesammelten Daten zustimmen, um den Dienst zugleich mit frischen Daten zu versorgen. Mit Hilfe auf dem Gerät zwischengespeicherter Informationen kann eine Positionsbestimmung ohne weitere Datenbankabfrage im Internet erfolgen.
Nachdem die unbegrenzte Protokollierung der Aufenthaltsorte auf dem iPhone bekannt geworden ist, hat der schwedischen Software-Entwickler Magnus Eriksson (aka packetlss) die Cache-Datenbank des Android-Lokalisierungsdienstes analysiert.
Following the latest days internet outrage/overreaction to the revelation that iPhone has a cache for its location service, I decided to have look what my Android devices caches for the same function. (bit.ly/dJdeMI)
Die Datenbanken liegen im Verzeichnis /data/data/com.google.android.location/files auf dem Android-Gerät. Darin werden die Kennungen der Basisstationen (cache.cell) und MAC-Adressen der WLAN-Netze (cache.wifi) mit Geokoordinaten und Zeitstempel abgelegt. Auf GitHub hat Eriksson ein Python-Skript zum Parsen der Daten publiziert. Um die Dateien lesen zu können, benötigt man root-Rechte auf dem Gerät.
Der freie Quellcode des Google-Standortcaches ermöglicht seine Analyse. Sie zeigt, dass die Einträge erst entfernt werden, wenn die maximale Anzahl von Einträgen erreicht ist, so dass auch sehr alte Daten enthalten sein können. Bis zu 50 Handyzellen-Einträge und 200 WLAN-Netze können im Cache liegen. Handyzellen-Informationen sind gültig, bevor das Gerät erneut beim Server anfragt. Bei WLAN-Netzen ist das maximale Alter auf 48 Stunden festgelegt. Ich kann das leider nur für die Android-Version 1.0 bestätigen. Nur dafür liegt der Quelltext für die Klasse android.location.LocationCache vor. In den folgenden Versionen finde ich z.B. die Dateinamen für die Caches nur in bereits kompilierten Binärdateien, nicht jedoch in den Quellen. Daher kann in aktuellen Version auch eine andere Implementierung möglich sein.
However, data is only pruned when new info is added. There is no time based pruning unless there is new data being added to the cache. This could lead to old data being if there is limited movement of the device. (bit.ly/dJdeMI)
So wie ich das beobachtet habe, erfolgt ein neuer Eintrag nur, wenn es sich um unbekannte Stationen handelt. Alte Informationen zu einer breits registrierten Station werden mit neuen Daten überschrieben. So ist es nicht verwunderlich, dass in dem mir vorliegenden Cache-File jede WLAN-Adresse nur einmalig aufgeführt ist. Das stimmt mit der Implementierung in Android 1.0 überein.
private void insert(String key, LocationCache.Record record) { remove(key); put(key, record); ... }
Eine vollständige Bewegungsprofilrekonstruktion wäre damit allein nicht möglich. Die auf dem Gerät zwischengespeicherten Daten lassen nur den einmaligen Besuch eines Ortes erkennen. – Warum mein Besuch in Dortmund nicht aufgeführt ist? Da habe ich ausschließlich per GPS navigiert.
Die Funktion zum Zwischenspeichern kann auf Androidgeräten in den Einstellungen unter Standort & Sicherheit / Drahtlosnetzwerke deaktiviert werden. Unter Android 2.3 werden damit die Cache-Dateien gelöscht. Unter der Version 2.2 werden keine neuen Informationen zum Cache hinzugefügt.
Neueste Kommentare