Gibt es einen gemeinsamen GPS-Cache auf Android?

Nach dem, was ich über Android-Sicherheit verstanden habe, sind alle Anwendungen durch verschiedene Benutzerkonten und verschiedene Dateisystemspeicherorte getrennt.

ABER: Nachdem GPS-Test meinen Standort zum ersten Mal nach dem Einschalten ermittelt hat, werden alle anderen Anwendungen sehr schnell fixieren. Mein Fazit: Das muss etwas nicht im Android Userspace sein.

Wie funktioniert das?

Antworten (1)

Wenn jede App die rohen GPS-Eingaben selbst interpretieren müsste, wäre das sehr albern. Verschiedene Apps würden den gleichen Aufwand zum Decodieren und Interpretieren der GPS-Eingabe zur Berechnung eines Standorts duplizieren. Verschiedene Apps würden dazu unterschiedliche Bibliotheken verwenden, sodass jede App möglicherweise eine andere Vorstellung von Ihrem Standort hat.

Stattdessen wird der Prozess der Interpretation der GPS-Daten zur Berechnung mit einem Standort zentral in Android selbst abgewickelt. Das Android-System bietet eine Schnittstelle für Apps, um den Standort abzufragen, ohne sich um die Details kümmern zu müssen, ob er von GPS, Mobilfunkmasten oder WLAN-Netzwerken stammt.

Auf diese Weise muss nur das Android-System den Standort unter Verwendung aller möglichen Quellen berechnen, es kann diesen Standort ohne doppelten Aufwand an viele Apps weitergeben, und (wie Sie bemerkt haben) muss nicht jede App bei Null anfangen, um zu berechnen der Standort. Neuere Android-Versionen machen auch clevere Tricks wie das Vergeben eines weniger genauen Standorts an Apps, die die Berechtigung "ungefährer (netzwerkbasierter) Standort", aber nicht die Berechtigung "genauer (GPS-) Standort" haben, unabhängig davon, welche Methoden zur Bestimmung tatsächlich verwendet wurden der Standort.

Intern funktioniert dies mit einem sogenannten gebundenen Systemdienst: einem IPC-Mechanismus für verschiedene Prozesse, um Daten von dem Dienst zu erhalten, der den Standort tatsächlich berechnet. Der Dienst wird im Benutzerbereich ausgeführt, nicht im Kernel, und wie jede andere Android-App wird er in einem eigenen Prozess ausgeführt. (Nur die sehr niedrigen Ebenen des GPS-Empfängertreibers laufen innerhalb des Kernels.) Die Einzelheiten darüber würden den Rahmen dieser Site bei weitem sprengen, aber wenn Sie interessiert sind, können Sie mehr erfahren, indem Sie die Seite Standortstrategien im offiziellen lesen Leitfaden für Android-Entwickler .

com.android.location.fused ist ein laufender Prozess, der so klingt. Ist das die Anwendungsschicht, die Sie beschrieben haben?
TL;DR; Auf niedrigem Niveau speichert das GPS die Standortbestimmung und merkt sich, wo es aufgehört hat, wodurch es bei Aktivierung einfacher fortgesetzt werden kann.
@ t0mm13b Klingt für mich ein bisschen nach einer anderen Antwort (Low-Level ist sogar außerhalb von Android, oder?)
@Nils - im Framework, Kernel (Treiber)-Ebene unter Android :)
@ t0mm13b Das ist einfach nicht wahr. In Linux-Systemen (einschließlich Android) wird die gesamte schwere Arbeit für die GPS-Ortung in der libgps-Bibliothek des Benutzerbereichs erledigt. Wie ich in meiner Antwort sage, ist der einzige erforderliche Kerneltreiber der UART-Treiber, um mit der GPS-Hardware zu kommunizieren. Der Kernel-Treiber führt keine Standortberechnungen oder Caching durch.