Стратегия старта местоположения

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

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

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

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

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

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

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

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

---------------- Update ----------------

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

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

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

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

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

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

Ответ 1

В Google IO 2013 они показали в сеансе "За гранью Blue Dot: новые функции в Android Location" новый подход, см. видео здесь.

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

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

Ответ 2

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

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

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

locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this);