Я сделал тестовое приложение для Gps, Wifi и Fused Location Provider и тестировал его в течение 2 дней. Это лучше, потому что он использует оба из них, и в большинстве случаев он является наиболее точным. Кроме того, данные GPS представляют собой очень зашумленные данные, которые вызывают дрожание, для устранения этого используются фильтр нижних частот или другие фильтры. Одним из наиболее успешных фильтров, используемых для получения наиболее точных результатов, является фильтр Калмана. FusedLocationProvider использует этот фильтр так же, как RotationVector, который представляет собой объединенный датчик, сочетающий аппаратное и программное обеспечение. RotationVector использует акселерометр, гироскоп (если имеется) и датчик магнитного поля для получения и фильтрации данных о положении и азимуте.
Location.getProvider для Gps с LocationManager возвращает «gps», Wifi возвращает «сеть», а FusedLocationProvider возвращает «плавленный».
Когда GPS выключен и я установил высокий приоритет, означает ли это, что GPS будет автоматически включаться или нет?
Все, кроме «Экономия заряда батареи», включает GPS, если он доступен. Эти настройки доступны на моем телефоне Android 7.1.1. Настройка местоположения отличалась в предыдущих версиях Android на стороне пользователя. Как разработчик, чтобы включить использование GPS, вы должны установить mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
PRIORITY_HIGH_ACCURACY — используйте этот параметр, чтобы запросить максимально точное местоположение. С этой настройкой службы определения местоположения с большей вероятностью будут использовать GPS для определения местоположения.
Настройка приоритета также определяет уровень использования батареи.
Могу ли я установить UpdateLocation с провайдером Fused с ВЫСОКИМ приоритетом по запросу, чтобы хотя бы немного сэкономить заряд батареи?
Да, вы можете установить интервал запроса местоположения в дополнение к приоритету.
mLocationRequest.setInterval(UPDATE_INTERVAL_IN_MILLISECONDS);
mLocationRequest.setFastestInterval(FASTEST_UPDATE_INTERVAL_IN_MILLISECONDS);
Как я могу узнать, какой провайдер использует Fused (GPS или сетевой провайдер)?
Местоположение от Wi-Fi никогда не возвращает true для Location.hasSpeed(), но Gps почти всегда возвращает true, если вы находитесь на улице. Также в location.getExtras() есть тег спутников, который вы можете проверить на наличие спутников, доступных только для GPS. Скорость может быть неправильной, если вы идете пешком или, насколько я читал, я не пробовал это на машине, когда скорость меньше 5 км / ч, это не очень точно. Я имею в виду, что если вы используете FLP и данные о последнем местоположении содержат информацию о скорости, это определенно от GPS.
Есть ли в нем отрицательные моменты?
Начиная с Android 8.0 и выше существует ограничение на получение местоположения если вы не используете службу переднего плана или не получаете местоположение на переднем плане, пока приложение не приостановлено как для FLP, так и для LocationManager.
Также FLP требует, чтобы GooglePlayService был доступен на устройстве пользователя, и он должен быть выше определенной версии. 10 или 11 в зависимости от того, какой из них вы используете. Это может быть проблемой, если вы хотите опубликовать свои приложения в стране, например в Китае, где запрещены сервисы Google Play.
person
Thracian
schedule
10.10.2017