Есть ли альтернатива Location Client (Google Play API)?
Я работаю над приложением, которое использует данные о местоположении, и оно должно работать в Китае. На Android-устройствах, продаваемых здесь, Google Play API в основном не установлен, и единственный способ - установить телефон на рут. Так что я застрял с LocationManager, который работает намного хуже, чем LocationClient (часть Google Play API).
Моя проблема в том, что LocationManager при чтении с GPS_PROVIDER часто не может подключиться к достаточному количеству спутников (в Китае), и между исправлениями иногда бывает значительный временной разрыв. При чтении из NETWORK_PROVIDER я могу получать более частые исправления, однако точность колеблется от 30 до 500. Качество API LocationClient далеко не близко.
Приложение должно часто контролировать ваше движение по улицам, например. обновлять каждую секунду (высокий уровень заряда батареи, не проблема для моего клиента) и делать что-то, когда вы достигаете определенных мест.
Если я использую Google Play API и LocationClient, это действительно хорошо работает. Но это только на Nexus4 или на некитайском Android-устройстве.
Я спрашиваю, знает ли кто-нибудь библиотеку, которая может дать лучшие результаты, чем прямое использование LocationManager, или решение, как использовать LocationManager для улучшения результатов?
1 ответ
GPS не работает должным образом из-за отсутствия необходимых метаданных GPS (эфемерид и данных альманаха) или из-за медленного сбора этих метаданных. В последнем случае в большинстве стран данные эфемерид и альманахов GPS доступны через сетевые источники. Если нет, то чип GPS должен загрузить его со спутников, что может занять 5–20 минут (самое быстрое время, когда исходный поток данных предоставил достаточно информации, чтобы чип GPS мог получить блокировку). Я не знаком с доступностью этих данных в Китае через сетевые источники, но, похоже, они мало доступны из того, что вы испытываете. (Ключевые слова для Google для получения дополнительной информации: SUPL, эфемерид, Alamanac).
Когда GPS недоступен или медленный, чтобы получить блокировку, геолокация сети является запасным вариантом, который использует точки Wi-Fi и вышки сотовой связи для триангуляции позиции. Для этого требуется, чтобы устройство отправляло точки доступа и вышки, которые оно видит, через интернет-службу, а служба отправляет обратно местоположение. Уровни точности от 30 до 500 метров вполне хороши для этого.
(Кстати, позиция геолокации в сети также используется для "посева" чипа GPS, чтобы помочь ему получить более быструю блокировку)
Географическое положение сети на Android обычно предоставляется веб-службой Google, но телефон может быть настроен на использование другими провайдерами операторов.
Вы можете отказаться от использования Google (Google Play или сервера геолокации сети Google) или встроенного сервиса определения местоположения в сети, воспользовавшись бесплатным сервисом геолокации сети Mozilla: https://location.services.mozilla.com/
Вам необходимо запросить ключ API: https://location.services.mozilla.com/api Для примера кода: это приложение предоставляет данные и является клиентом для службы: https://github.com/mozilla/MozStumbler
Я сомневаюсь, что это повысит точность определения географического местоположения сети для региона, в котором вы находитесь, поскольку вы уже получаете хорошие результаты, но, возможно, это стоит изучить.