Стратегия начала локации - PullRequest
10 голосов
/ 12 октября 2011

Периодически я получаю обновления местоположения через GPS, проблема в том, что время первого обновления местоположения происходит - это просто слишком долго.Когда пользователь находится внутри здания, это время становится еще хуже.

Поэтому я ищу некоторые стратегии, чтобы улучшить время запуска (на данный момент я не использую getLastKnownLocation, но я буду использовать).Я начал читать Глубокое погружение в локацию , чтобы получить некоторые идеи и подумать, и теперь я хотел бы обсудить это с вами.

Сначала упомянутое выше сообщение в блоге проходит через каждого провайдера локации наустройство и запрашивает getLastKnownLocation, но рассматривает их только в том случае, если они не старые и с допустимой точностью.

Вот мой первый вопрос: я ожидаю, что сетевое местоположение будет немедленно доступно,поэтому я запросил бы новое местоположение на основе сети, затем я бы получил getLastKnownLocation от поставщика GPS, и если последнее местоположение GPS находится в пределах круга, образованного местоположением на основе точечной сети и точностью радиуса, то я бы взял местоположение GPSнезависимо от того, сколько ему лет.Как вы думаете?

После проверки последнего известного местоположения я начну отслеживание местоположения по GPS, и, поскольку он мне нужен только каждые 2 секунды и изменение на 10 м, я бы использовал lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 2 * 1000, 10, this);

ОднакоЯ нашел шаблон (внутри презентации Быть эпичным: Лучшие практики для разработки под Android на слайде 95 и 96 , что сначала он включает грубые и красивые места (с 0,0 для изменения времени и расстояния), а затем, когда первое событие получено, он переключается на действительно необходимую частоту обновления. Итак, первое gps-обновление происходит быстрее, когда интервал установлен в 0?

В противоположность этому шаблону я оставляю грубое обновление до получения первого обновления GPS. Как вы думаете?

Надеемся получить интересные ответы!

---------------- Обновление ----------------

Я провел некоторые исследования: я включил GPS и ждал, чтобы получить исправлениеЗатем я выключил GPS и проехал 50 км (31 миль). Затем я использовал код f Глубокое погружение в локацию , чтобы получить все getLastKnownLocation.Я попробовал это дважды, сначала с выключенным GPS и вторым с включенным GPS, но без исправления:

1) с выключенным GPS я получил
- Поставщик: сеть, правильное местоположение с точностью 680 м
- провайдер: пассивный (mProvider = network), то же местоположение, что и выше, то же время, что и выше
- провайдер: gps, местоположение ноль

Итак, я узнал, что при отключении gps вы не получаете getLastKnownLocation.

2) с включенным GPS Я получил
- Провайдер: сеть, правильное местоположение с точностью 652м
- Провайдер: пассивный (mProvider = сеть), то же местоположение, что и выше, в то же времякак указано выше
- Поставщик: GPS, местоположение, как это было на 2 часа раньше, с точностью 12 м, время также было на 2 часа раньше

Здесь я узнал, что старые сообщения не являются недействительными, даже если очевидно, что они неверны.

В этом случае алгоритм работает нормально, потому что я перешел во время, когда я выключил GPS.Но что, если я войду в дом?В этом случае 2-х часовой результат GPS будет очень хорошим, даже если он устарел.

Ответы [ 2 ]

4 голосов
/ 17 мая 2013

На Google IO 2013 они показали в сеансе За синей точкой: новые функции в Android Location новый подход, смотрите видео здесь .

Инженеры из Google перепробовали много разных стратегий, в результате "провайдер локализованных данных". Его качество показано в 12:17 на видео.

Кетан Пармар опубликовал в своем блоге сообщение о том, как поставщик слитого местоположения может быть использован в примере приложения.

0 голосов
/ 06 июля 2012

Сначала запустите диспетчер местоположений с пассивным провайдером

locationManager.requestLocationUpdates(LocationManager.PASSIVE_PROVIDER, AlarmManager.INTERVAL_FIFTEEN_MINUTES, 75, this);

, а затем, как только вы получите ответ, вы можете переключиться на оборудование GPS.

locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...