Я периодически получаю обновления местоположения через GPS, проблема в том, что время до первого обновления местоположения происходит - это слишком долго. Когда пользователь находится внутри здания, это время становится еще хуже.
Поэтому я ищу несколько стратегий, чтобы уменьшить время запуска (на данный момент я не использую getLastKnownLocation
, но буду). Я начал читать Глубокое погружение в локацию , чтобы получить некоторые идеи и некоторые мысли, которые я хотел бы обсудить с вами.
Сначала сообщение в блоге, упомянутое выше, проходит через каждого провайдера местоположения на устройстве и запрашивает getLastKnownLocation
, но учитывает их только тогда, когда они не слишком старые и находятся в пределах допустимой точности.
Вот мой первый вопрос: я ожидал, что сетевое местоположение будет доступно немедленно, поэтому я бы запросил новое сетевое местоположение, тогда я получил бы getLastKnownLocation
от поставщика GPS, и если последнее GPS-местоположение находится внутри круга, образованного точками местоположения на основе точечной сети и точностью радиуса, тогда я бы взял местоположение GPS, независимо от того, сколько ему лет. Как вы думаете?
После проверки последнего известного местоположения я начну отслеживание местоположения по GPS, и, поскольку оно мне нужно только каждые 2 секунды и изменение на 10 метров, я бы использовал
lm.requestLocationUpdates (LocationManager .GPS_PROVIDER, 2 * 1000, 10, это);
Однако я нашел закономерность (внутри презентации Быть Epic: Лучшие практики для разработки под Android на слайде 95 и 96 , что сначала он включает грубые и точные местоположения (с 0,0 для изменения времени и расстояния), а затем, когда получено первое событие, он переключается на действительно необходимую частоту обновления. -update выполняется быстрее, если интервал установлен на 0?
В отличие от этого шаблона, я бы держал грубое обновление до получения первого обновления GPS. Как вы думаете?
Надеюсь получить несколько интересных ответов!
---------------- Обновление ----------------
Я провел небольшое расследование: я включил GPS и подождал исправить. Затем я выключил GPS и проехал 50 км (31 милю). Затем я использовал код из A Deep Dive Into Location , чтобы получить все getLastKnownLocation
. Я пробовал дважды , первый с выключенным GPS и второй с GPS Turnne d включен, но без исправления:
1) с выключенным GPS я получил
- Провайдер: сеть, точное местоположение с точностью 680 м
- Провайдер: пассивный ( mProvider = network), то же местоположение, что и выше, то же время, что и выше
- Provider: gps, location null
Итак, я узнал, что когда gps отключен, вы не получите getLastKnownLocation
.
2) при включенном GPS я получил
- Поставщик: сеть, точное местоположение с точностью 652 м
- Поставщик: пассивный (mProvider = сеть), то же местоположение, что и выше, то же время, что и выше
- Провайдер: GPS, местоположение, как было на 2 часа раньше с точностью 12 минут, время было также на 2 часа раньше
Здесь я узнал, что старые сообщения не являются недействительными, даже если они очевидно, что они неправы.
В этом случае алгоритм работает нормально, потому что я двигался вовремя, когда выключил GPS. Но что, если я войду в дом? В этом случае результат двухчасового старого GPS будет очень хорошим, даже если он устарел.