Как наиболее точно определить местоположение устройства Android? - PullRequest
0 голосов
/ 19 сентября 2018

Я создаю приложение, которое должно сообщать пользователям точное местоположение.Требуется только одно местоположение, т.е. мне не нужно постоянно отслеживать устройство.

Я хочу, чтобы местоположение было максимально точным, и можно подождать некоторое время, чтобы определить местоположение (максимум 1-2 минуты).

Я просматривал FusedLocationProviderClient.getLastLocation () , но, поскольку я хочу, чтобы местоположение было как можно более точным и обновленным, оно не соответствует моим потребностям.

Итак, я начал смотреть на использование FusedLocationProviderClient.requestLocationUpdates () , и это кажется лучшим выбором.

Но я не уверен, как лучше настроить мой LocationRequest, чтобы получить как можно более точную точность.Например, было бы лучше использовать setNumUpdates () , чтобы я получал только одно обновление и использовал его в качестве своего местоположения, или я должен получать несколько обновлений в надежде получить лучшую точность (привязка GPS к большему количествуспутники например)?Я думаю, что, если я использую второй подход, я мог бы смотреть на значение getAccuracy() из каждого обновления местоположения и сохранять только тот, который имеет наивысшую точность.Недостатком является то, что, если устройство движется, и я продолжаю получать обновления в течение минуты или около того, первое местоположение может иметь самую высокую точность, но, поскольку это минута, это уже не точно.

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

Ответы [ 2 ]

0 голосов
/ 20 сентября 2018

Возможно, вы захотите использовать LocationManager.По моему опыту, FusedLocation действительно будет блокироваться быстрее, но может быть не столь точным в целом или хотя бы на некоторое время.У меня есть приложение, которое также требует довольно точных координат.По умолчанию я использую подход на основе LocationManager, но пользователи могут переключиться на поставщика FusedLocation, если им нужна более быстрая блокировка (например, в помещении).

Это хороший обзор https://developer.android.com/guide/topics/location/strategies

Дляпоставщик при запросе обновлений я бы использовал LocationManager.GPS_PROVIDER.Блокировка займет больше времени, так как будет ждать спутники и не использовать Wi-Fi или другие вышки.Но вы сказали, что все в порядке.Что-то в этом духе

LocationManager locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, YourLocationListener);

Как только вы начнете получать обновления местоположения через onLocationChanged() вашего слушателя, вы можете начать проверять местоположение на предмет точности, движения с момента последнего изменения местоположения и т. Д., Чтобы попытаться оценить, работает ли GPS.Приемник все еще находится на месте.Как только вы будете удовлетворены качеством исправления, вы можете прекратить получать обновления местоположения (locationManager.removeUpdates(YourLocationListener)), а затем запустить свою логику, которая требует местоположения.Ссылка, которую я предоставил, также содержит информацию об этом.

0 голосов
/ 20 сентября 2018

Сначала убедитесь, что точное местоположение включено.посмотрите на Settings.Secure.LOCATION_MODE_HIGH_ACCURACY Это имеет заметное преимущество перед использованием только GPS.Затем послушайте местоположение в течение некоторого времени и вычислите полученный результат, чтобы узнать лучшее местоположение.Вы также можете определить, перемещается ли пользователь, если число сильно отличается, или с помощью Activity Recognition API.Это не должно быть очень сложно написать эту функцию вычисления, чтобы получить лучший результат.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...