Как стать автором
Обновить

Комментарии 15

Все печально, сам сейчас мучаюсь. На деле получить приемлемое решение (для <2.3) которое позволит нам получить текущие координаты с заданной точностью на android выливается в многие десятки строк кода.
Я не знаю точно как Android работает с GPS приемником, но неужели не по NMEA протоколу? Если так — то было бы очень нелогично не предоставлять встроенные средства протокола для определения доступности/валидности координат.
Для более тщательного изучения вопроса я бы посмотрел в исходники Android'а на всякий случай.
Практика показывает, что далеко не все то что доступно внизу, интерфейсится наверх. Особенно в отношении андроида.
>неужели не по NMEA протоколу?

С внешними, наверняка так. Со встроенными — совершенно не обязательно. В любом случае, получается, данные с чипа обёртываются андроидным интерфейсом, который почему-то не активизирует события, если координаты не изменились. То есть понятно почему, но жалко, что это сделано неотключабельно, судя по всему…
r_ii, спасибо за наводку! До меня по непонятным причинам не доперло, что можно влезть в этот протокол. Сейчас поправлю топик
Хорошие советы, но еще бы исходный код как поддержка им.
Добавил небольшой кусочек, показывающий, как использовать GPSStatus. Остальное довольно просто
Есть вопрос, для тех, кто разбирается.

У меня андройд 2.3.4 основанный на одной из китайских бета версия для моего телефона. Но проблема была и на других прошивках.

Итак.

Когда нет GPS спутников — aGPS часто ошибается и отправляет меня за 2000 километров от моего положения.
При этом можно получить данные о местоположении из wifi, и у меня установлен wiper.apk

Но происходит вот такая неведомая фигня:

1. В Картах Гугл — через 3 секунды раздумия — моё местоположение находится как надо!
2. В Форсквере — моё местоположение — за 2000 км от нужного.
3. В GPS Status — вообще нет моего местоположения.

В gps.conf следующее:

NTP_SERVER=europe.pool.ntp.org
XTRA_SERVER_1=http://xtra1.gpsonextra.net/xtra.bin
XTRA_SERVER_2=http://xtra2.gpsonextra.net/xtra.bin
XTRA_SERVER_3=http://xtra3.gpsonextra.net/xtra.bin
DEBUG_LEVEL=0
INTERMEDIATE_POS=1
ACCURACY_THRES=250
SUPL_HOST=supl.google.com
SUPL_PORT=7276
CURRENT_CARRIER=common
DEFAULT_AGPS_ENABLE=TRUE
DEFAULT_SSL_ENABLE=FALSE
DEFAULT_USER_PLANE=TRUE

Как сделать так, чтобы заработало wifi geolocation?
Как всё запущено :(
Я думал что в андроиде есть какой то системный сервис который возвращает информацию о координате, о точности с которой она определена, и источником данных(gps, wi-fi, gsm network)
Не совсем так. В андройде получить текущую координату на самом деле относительно просто. Здесь речь идет о том, чтобы определять, возможно ли в данный момент получение координат через GPS
А какая разница, с помощью GPS или нет? Вас же на самом деле интересует точность, про которую dab512 упомянул. Может, точность хорошая, но получена каким-нибудь ГЛОНАСС, это ж ничего не меняет. По-моему, dab512 говорит о правильной модели, только список источников данных должен быть расширяемым.
такая возможность есть и очень прозрачна:
методы getAccuracy и getProvider класса Location

тоесть провайдера можно узнать. с другой стороны прикладным программам (имхо — всем кроме специализированных gps статусов) вообще не нужно знать провайдера — только точность
дело за малым — парсить полученную строку

в этом месте не помешала бы ссылка на NMEA парсер — не писать же его самому в самом деле
В данном случае нужно вытащить один параметр, номер которого известен, из строки, формат которой можно посмотреть по одной из ссылок. По-моему, задача элементарна
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории