Есть ли общий кеш GPS на Android?

Из того, что я понял о безопасности Android, все приложения разделены разными учетными записями пользователей и разными местоположениями файловой системы.

НО: После того, как GPS-тест зафиксировал мое местоположение в первый раз после включения питания, все остальные приложения зафиксируют его очень быстро. Мой вывод: это должно быть что-то не в пользовательском пространстве Android.

Так как же это работает?

Ответы (1)

Если бы каждое приложение должно было само интерпретировать необработанные данные GPS, это было бы очень глупо. Различные приложения будут дублировать одни и те же усилия по декодированию и интерпретации входных данных GPS для вычисления местоположения. Разные приложения в конечном итоге будут использовать разные библиотеки для этого, поэтому каждое приложение может иметь разное представление о вашем местоположении.

Вместо этого процесс интерпретации данных GPS для вычисления местоположения выполняется централизованно в самом Android. Система Android предлагает интерфейс, с помощью которого приложения могут запрашивать местоположение, не беспокоясь о деталях, получено ли оно от GPS, вышек сотовой связи или сетей Wi-Fi.

Таким образом, только система Android должна вычислять местоположение, используя любые возможные источники, она может предоставить это местоположение многим приложениям без дублирования усилий, и (как вы заметили) каждому приложению не нужно начинать вычисление с нуля. Местоположение. В более поздних версиях Android также используются хитрые трюки, такие как предоставление менее точного местоположения приложениям, которые имеют разрешение «приблизительное (сетевое) местоположение», но не разрешение «точное (GPS) местоположение», независимо от того, какие методы фактически использовались для определения. Местоположение.

Внутри это работает с так называемой связанной системной службой: механизмом IPC, позволяющим различным процессам получать данные от службы, которая фактически вычисляет местоположение. Служба работает в пространстве пользователя, а не внутри ядра, и, как и любое другое приложение для Android, работает внутри собственного процесса. (В ядре работают только самые низкие уровни драйвера GPS-приемника.) Детали этого выходят далеко за рамки этого сайта, но если вам интересно, вы можете узнать больше, прочитав страницу «Стратегии определения местоположения» на официальном сайте. Руководство для разработчиков Android .

com.android.location.fused — это запущенный процесс, который звучит так. Это прикладной уровень, который вы описали?
TL;ДР; Низкий уровень, GPS кэширует исправление местоположения и запоминает, где оно было остановлено, что упрощает возобновление работы при активации.
@ t0mm13b Для меня это немного похоже на другой ответ (низкий уровень даже за пределами Android, верно?)
@Nils - на фреймворке, уровень ядра (драйвера) ниже андроида :)
@ t0mm13b Это просто неправда. В системах Linux (включая Android) вся тяжелая работа по определению местоположения по GPS выполняется в библиотеке libgps пользовательского пространства. Как я уже сказал в своем ответе, единственный необходимый драйвер ядра — это драйвер UART для связи с оборудованием GPS. Драйвер ядра не выполняет никаких расчетов местоположения или кэширования.