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

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

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

есть ли способ получить просто координаты с вышеупомянутыми требованиями? Любой пример кода будет высоко ценится.

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

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

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. Должно быть получено программно при запуске приложения

затем вызовите item locationManager.requestLocationUpdates о событии onCreate mainActivity.


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

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

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

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

каков самый старый API Android, который вы хотите бежать?


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

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

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

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

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

я протестировал функции GPS от Android 2.3 до 5.0 устройств. У них у всех все в порядке.

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

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

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

звуки вы путаете вещи: чтение местоположения GPS-это одно. Показывать это место на карте-совсем другое дело!

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

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

"...Также каково Ваше мнение о последнем слитом API?..."

Я тестировал его и использовал его некоторое время, но я отказался от него. Необходимо, чтобы сервисы Google Play были установлен для работы (не проблема, большинство пользователей имеют его на своих устройствах). Но если вам нужна точность (как и мне), это не сработает. Он использует " плавленые датчики "(акселерометр, gps, wifi, компас и т. д...) попытаться получить местоположение пользователя с минимальной мощностью. Иногда, он говорит, что ты в 10 милях от места, где ты на самом деле. Я не мог заставить его работать нормально, чтобы сохранить" путь", где пользователь был. Но это действительно экономит батарею.


предложение использовать Google Location Services Он принимает наилучшее возможное и точное местоположение, насколько это возможно в текущий момент. Он автоматически (с конфигурацией конечно) принимает самую лучшую настоящую точность слишком - все, что угодно доступное ГПС, сеть, Интернет, ГСМ/КДМА/ЛТЭ... Он также обналичивает последнее известное местоположение, поэтому, в основном, вы знаете его каждый момент - лучшее, что вы можете.

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

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

вот еще ссылке


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