Более быстрое получение координат GPS программным способом без интернета, но с использованием сетевого провайдера и мобильного GPS

Я задал много вопросов по этой теме, но, похоже, некоторые из моих требований отсутствуют:

  1. Я хочу получить местоположение GPS с ~0.0001 точностью
  2. Не хочу пользоваться Интернетом; Хотя сеть GSM / CDMA в порядке
  3. Должен быть получен программно при запуске приложения
  4. Должно быть быстрее, скажем, в течение минуты (например, iPhone, который, вероятно, также работает в режиме полета!)
  5. Код должен работать на большинстве устройств
  6. Телефон может включаться / выключаться в любой момент и путешествовать на любое расстояние

Есть ли способ получить только координаты с указанными выше требованиями? Мы будем очень благодарны за любой фрагмент кода примера.

Проверка различных приложений, таких как «Найдите меня», «Maverick», которые утверждают, что показывают офлайн-местоположения. Но в различных сценариях без Интернета они не отслеживают местоположение (в Индии).
Я ответил на множество старых / новых вопросов внутри / за пределами SO. Ниже несколько:

[Примечание: я задаю этот вопрос от имени своей команды Android и буду рад уточнить детали, если их попросят. Если вы считаете, что этот пост принадлежит Android.Stackexchange, переместите его.]


person iammilind    schedule 27.04.2015    source источник
comment
Может быть, вы не получите такой точности, используя сеть. Насколько я знаю, GPS зависит от оборудования, и устройство также отвечает за более медленное получение координат. GPS также зависит от того, где вы сейчас находитесь. Вы считаете это своими требованиями?   -  person Codelord    schedule 27.04.2015
comment
@CodeLord, я не понял ваш вопрос, но, AFAIK, iOS также зависит от A-GPS, но все же быстрее находит геокоды в автономном режиме. Да, GPS может зависеть от текущего местоположения, и, возможно, именно поэтому мы находим Last Known Loction в Android при нахождении текущего местоположения. Все мои требования перечислены в самом вопросе.   -  person iammilind    schedule 27.04.2015
comment
Имея только GPS, прямая видимость всегда будет проблемой. Если приложение запускается внутри здания / комнаты, у вас меньше шансов получить местоположение, оставьте в стороне с указанной точностью. Вы можете найти фрагмент в Android для определения местоположения с помощью GPS, сети < / а>. Этот код будет работать на большинстве устройств, но время получения loc и точность будут проблемой, если вы не находитесь в открытом доступе. Не совсем понял твою шестую точку.   -  person Pararth    schedule 29.04.2015
comment
Дозе GPS нужен интернет? определенно вы можете получить это программно. Но точность в ~ 0,0001 недоступна для мобильных устройств.   -  person Xcihnegn    schedule 29.04.2015
comment
@xcihnegn, посмотрите на 2-е требование. Какой уровень точности мы можем получить без Интернета?   -  person iammilind    schedule 30.04.2015


Ответы (3)


1. Я хочу получить местоположение GPS с точностью ~ 0,0001

Вы можете слушать только поставщика GPS и отбрасывать местоположение, если оно не имеет требуемой минимальной точности:

locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 5, myLocationListener);  // "myLocationListener" must be an object from a class that implements LocationListener 

// "myLocationListener" implementation of LocationListener.onLocationChanged
public void onLocationChanged(Location location)
{    
    int MIN_ACCURACY = 5; // in metters
    if ((!location.hasAccuracy()) || (location.getAccuracy() > MIN_ACCURACY))
    {
        // discard this location and keep listening to new location readings
    }
    else
    {
        // that's a good reading!

        // do somethings you want... blah, blah, blah...

        // stop updates when you get the location to preserve users' battery.
        locationManager.removeUpdates(myLocationListener);
    }
}

2. Не хочу пользоваться Интернетом; Хотя сеть GSM / CDMA в порядке.

Да, GPS работает полностью автономно. Android может использовать Интернет ТОЛЬКО для обновления кеша данных A-GPS и обеспечения более быстрого чтения при холодном запуске обновлений.


3. Должен быть получен программно при запуске приложения

Затем вызовите элемент locationManager.requestLocationUpdates в событии onCreate mainActivity.


4. Должно быть быстрее, скажем, в течение минуты (например, iPhone, который, вероятно, также работает в режиме полета!)

Имейте в виду, что iPhone работает с «высококачественным оборудованием». Android можно запускать на дрянных устройствах. Так что это будет зависеть от:

  • Аппаратное качество устройства;
  • Количество спутников, которые видны на небе в данный момент;
  • Возраст данных альманаха и эфемерид в кэше GPS;
  • GPS может не считывать данные со спутников, потому что пользователь находится внутри здания или чего-то подобного.

5. Код должен работать на большинстве устройств.

Какой самый старый API Android вы хотите, чтобы он запускал?


6. Телефон может включаться / выключаться в любое время и путешествовать на любое расстояние

Я не понял. Что вас беспокоит по этому поводу?

------------------------------------------------------------------------------

Обновление 1:

"... Я хочу использовать Android 4.0 и выше ..."

Я тестировал функции GPS на устройствах с Android 2.3 и 5.0. На всех из них все работает нормально.

"... Я заметил, что одно демонстрационное приложение на основе географических координат, которое работало на других устройствах, не работает в моем LGG3 с Android 5.0. Есть идеи по этому поводу? ..."

Вы проверяли разрешения GPS в настройках Android? (Может быть, он отключен) Или может быть проблема с оборудованием? В другом подобном аппарате пробовали?

"... Предположим, что GPS показывает правильное местоположение в Нью-Йорке, я выключаю телефон, а затем включаю его по прибытии в Лондон, тогда он по-прежнему будет показывать правильное местоположение (без интернета)? ... "

Похоже, вы что-то путаете: одно дело - определить местоположение по GPS. Другое дело, отображать это местоположение на КАРТЕ!

Вам не нужно быть подключенным к Интернету, чтобы считывать данные о местоположении по GPS. Но, если вы хотите показать это местоположение на КАРТЕ, возможно, вам понадобится Интернет (для загрузки ресурсов карты и т. Д.).

Если вам нужно продолжать периодически собирать данные о местоположении GPS (скажем, от 10 до 10 минут), тогда будет лучше использовать AlarmManager, чтобы запланировать таймер, который будет "нажимать" на ваше приложение и говорить: "Эй, пора сделать показания GPS. ! ».

"... Что вы думаете о последней версии Fused API? ..."

Я тестировал его и использовал некоторое время, но я отказался от него. Для работы необходимо установить сервисы Google Play (это не проблема, у большинства пользователей они есть на своих устройствах). Но если вам нужна ТОЧНОСТЬ (как мне), это не сработает. Он использует «встроенные датчики» (акселерометр, GPS, Wi-Fi, компас и т. Д.), Чтобы попытаться определить местоположение пользователя с минимальной мощностью. Иногда говорится, что вы находитесь в 10 милях от того места, где находитесь на самом деле. Я не мог заставить его нормально работать, чтобы сохранить «путь», на котором был пользователь. Но это действительно экономит батарею.

person Christian    schedule 05.05.2015
comment
По поводу пунктов: (5) Я хотел бы использовать Android 4.0 и выше. Я заметил, что одно демонстрационное приложение на основе географических координат, которое работало на других устройствах, не работает в моем LGG3 с Android 5.0. Есть идеи по этому поводу? (6) Предположим, что GPS показывает правильное местоположение в Нью-Йорке, я выключаю телефон, а затем включаю его по прибытии в Лондон, тогда будет ли он по-прежнему показывать правильное местоположение (без Интернета)? Если нет, то как насчет близлежащих городов Нью-Йорка? ... Также каково ваше мнение о последней версии Fused API? - person iammilind; 06.05.2015
comment
У меня большой опыт работы с GPS и картами, благодаря исследованиям, которые я провел, чтобы реализовать их в своем приложении. Я буду рад помочь вам в любом вопросе, который у вас возникнет. Возможно, лучшее место для разговора - это чат, и я дополню ответ позже всеми выводами, которые мы получим. Не знаю, могу ли я начать сеанс чата с моими очками репутации, но вы точно можете. - person Christian; 06.05.2015
comment
Спасибо, но из-за разницы в часовых поясах между Бразилией и Индией будет сложно общаться. Цените, если вы можете обновить ответ, исходя из своих знаний. - person iammilind; 06.05.2015
comment
Я обновил ответ. Проверьте это и не стесняйтесь задавать другие вопросы, если хотите. - person Christian; 06.05.2015
comment
@Christian Я также работаю над GPS для определения текущего местоположения, но какое-то время я не могу определить местоположение, вызывая этот метод location = locationMangaer.getLastKnownLocation(LocationManager.NETWORK_PROVIDER) или location = locationMangaer.getLastKnownLocation(LocationManager.GPS_PROVIDER);, вы можете дать мне какое-то предложение. - person Amjad Khan; 27.10.2017
comment
Амджад: вместо этого попробуйте requestLocationUpdates. - person Christian; 27.10.2017

Предлагается использовать службы геолокации Google. Это требует наилучшего и точного местоположение настолько точно, насколько это возможно в текущий момент. Он автоматически (с настройкой, конечно) также принимает лучшую текущую точность - независимо от того, что доступно GPS, сеть, Интернет, GSM / CDMA / LTE ... Он также кэширует последнее известное местоположение, поэтому, в основном, вы знаете это каждый момент - лучше всего, что вы можете.

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

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

Вот еще одна ссылка.

person Izold Tytykalo    schedule 30.04.2015
comment
Как вы думаете, эти API работают в автономном режиме, это главное требование для получения координат. Если да, не могли бы вы опубликовать несколько фрагментов кода. - person iammilind; 30.04.2015
comment
Под офлайн вы имеете в виду отсутствие услуг (Intrnet, WiFi, GSM ...)? Если услуги нет, то эта конкретная услуга не используется. Как и GPS - сигнал GPS нельзя получить, например, в здании или под землей. Таким образом, службы геолокации автоматически выбирают наиболее известное на данный момент местоположение. Это мог быть сигнал GPS неделю назад, но если это лучший из возможных, сервисы будут его использовать. Просто возьмите пример из предоставленной ссылки и используйте его. - person Izold Tytykalo; 30.04.2015
comment
stackoverflow.com/questions/21397177/ - person Izold Tytykalo; 30.04.2015

Используйте API объединенного местоположения, предоставляемый Android SDK. Внедрите объединенное местоположение в Сервис и вызовите его в своем приложении MainActivity.

person Zulqarnain Alam    schedule 06.05.2015