ЗДЕСЬ SDK Android: PositioningManager не работает с NETWORK_PROVIDER в 3.8 или 3.9 - PullRequest
0 голосов
/ 11 декабря 2018

Я работаю над обновлением существующего продукта, используя here-sdk с версии 3.7 до 3.8 / 3.9

. Он имеет аппаратный GPS на борту, доступный через Android LocationManager.GPS_PROVIDER, но также получает информацию о местоположении от внешнегоустройство, которое вводится через макет местоположения в качестве поставщика сети:

this.locationManager.addTestProvider(LocationManager.NETWORK_PROVIDER,
            false, false, false, false, true, true, true,
            Criteria.POWER_LOW, Criteria.ACCURACY_FINE);
this.locationManager.setTestProviderEnabled(LocationManager.NETWORK_PROVIDER, true);
this.locationManager.setTestProviderStatus(LocationManager.NETWORK_PROVIDER, 
            LocationProvider.AVAILABLE, null, System.currentTimeMillis());

Эти внешние данные используются главным образом, когда недоступен GPS, например.во время запуска.

PositioningManager запускается с: PositioningManager.getInstance().start(PositioningManager.LocationMethod.GPS_NETWORK);

В других местах кодовой базы есть обработчики locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, ...) -> onLocationChanged(Location location), которые запускаются в каждом новом макетированном местоположении, плюс прослушивание других обработчиковна LocationManager.GPS_PROVIDER, которые работают для обновлений с аппаратного GPS.

Есть также PositioningManager onPositionFixChanged() прослушиватели, которые запускают для этих же координат от обоих провайдеров.

В HERE SDK 3.7 это всеработает отлично.

Как только я обновляю HERE SDK до 3.8, обновления сетевого провайдера перестают работать.
Отображение карты больше не обновляется, и прослушиватели onPositionFixChanged() больше не запускают фиктивные обновления сети.Однако обновления GPS работают нормально.

Слушатели LocationManager onLocationChanged по-прежнему работают для сети, но не обратные вызовы PositioningManager.

Если я изменяю провайдер-провайдер на переопределение LocationManager.GPS_PROVIDER вместо сети,onPositionFixChanged() и карта обновляется корректно, но тогда реальные координаты GPS теряются.

SDK 3.9 ведет себя так же.

Даже при изменении запуска Positioning Manager, чтобы он не использовал gps, не работает только сеть, я не получаю обновлений ни от одного поставщика.

Переключение обратно на файл 3.7 aar заставляет все работать снова (сникаких других изменений кода)

Если это поможет, устройство работает под управлением Android 5.1.1

Спасибо!

1 Ответ

0 голосов
/ 19 декабря 2018

Я более подробно изучил эту тему, и основная причина - это изменение со следующим фоном:

В 3.7 SDK у нас возникла проблема с экстраполяцией туннеля, нарушенной «плохими» позициями сети -В простом тестовом приложении экстраполяция туннеля была прервана заявкой о местоположении в сети с точностью до 24 м, но, скорее всего, это не так.Это только один пример, но то, что определенно не должно происходитьВ рамках изменений, введенных в версии 3.8, мы считали, что в Android HERE We Go такой проблемы не было, потому что он использует только LocationMethod.GPS во время навигации и LocationMethod.GPS_NETWORK в любое другое время.Внедрение того же поведения означает, что обычно улучшается навигация в туннелях.

Таким образом, использование внешнего устройства для определения местоположения не будет работать, начиная с 3.8, и пока это считается ожидаемым поведением.С другой стороны, он больше не нужен, так как SDK поддерживает намного лучшее отслеживание.

...