2016-12-10 4 views
1

Я использую MapBox на Android (протестирован с Nexus 5x на 7.0 и 7.1) с довольно простой настройкой (см. Ниже). Странно то, что карта начинает дрейфовать, когда телефон не движется или не используется, как будто я хожу вокруг. Нижеприведенный пример кода является минимальным для репликации. Я добавил дополнительный приемник места и подключил его к Mapbox тоже. Интересно то, что, когда я дрейфую, нет никаких журналов для изменения местоположения, что заставляет меня думать, что это ошибка в SDK Mapbox (4.1.1).Mapbox my-location drift android

Любые мысли о том, что может происходить?

public class MainActivity extends AppCompatActivity { 

    private MapView mMapView; 
    private MapboxMap mMap; 
    private LocationManager mLocationManager; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     mMapView = (MapView) findViewById(R.id.map); 
     mLocationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
     mMapView.onCreate(); 
     mMapView.getMapAsync(this::onMapReady); 
     // To keep the example short I'm skipping the permissions. 
     mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, GPS_UPDATE_MIN_TIME, 
      GPS_UPDATE_MIN_DISTANCE, this::onLocationChanged); 
    } 

    @Override 
    public void onSaveInstanceState(Bundle state) { 
     super.onSaveInstanceState(state); 
     mMapView.onSaveInstanceState(state); 
    } 

    @Override 
    public void onLowMemory() { 
     super.onLowMemory(); 
     mMapView.onLowMemory(); 
    } 

    @Override 
    public void onDestroy() { 
     super.onDestroy(); 
     mMapView.onDestroy(); 
    } 

    @Override 
    public void onResume() { 
     super.onResume(); 
     mMapView.onResume(); 
    } 

    @Override 
    public void onPause() { 
     super.onPause(); 
     mMapView.onPause(); 
    } 

    private void onMapReader(MapboxMap map) { 
     mMap = map; 
     mMap.getTrackingSettings() 
       .setMyLocationTrackingMode(MyLocationTracking.TRACKING_FOLLOW); 
     mMap.setOnMyLocationChangeListener(this::onLocationChanged); 
    } 

    private onLocationChanged(Location location) { 
      Log.d("Map", "Mapbox location @ " + location.getLatitude() + ", " + location.getLongitude()); 
    } 
} 

Раскладка:

<com.mapbox.mapboxsdk.maps.MapView 
     android:id="@+id/map" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     app:style_url="@string/mapbox_style_url" 
     app:tilt="45" 
     app:scroll_enabled="false" 
     app:zoom_enabled="false" 
     app:rotate_enabled="false" 
     app:logo_enabled="false" 
     app:attribution_enabled="false" 
     app:my_location_enabled="true" 
     app:compass_enabled="false"/> 

ответ

1

ОК, так что проблема здесь заключалась в том, что режим отслеживания был сбрасывается при инициализации вида карты (и на любой вызов moveCamera. решение было добавить:

mMap.getTrackingSettings() 
     .setDismissLocationTrackingOnGesture(false); 
1

я столкнулся что-то вроде этого, а я не думаю, что это не имеет ничего общего с TrackingSettings#setDismissLocationTrackingOnGesture(false), хотя вы, вероятно, хотите назвать это так как вы. настройка режима отслеживания.

То, что вы описываете, звучит как TRACKING_FOLLOW, включенное в сочетании с a bug I submitted. В SDK Mapbox Android используется плавный датчик местоположения, а не обычный GPS. Я заметил, что он иногда теряет свое местоположение GPS или, по крайней мере, уделяет приоритетное внимание сетевому местоположению. Когда это происходит, кружок точности местоположения становится очень большим, а маркер местоположения дрейфует в направлении ближайших сотовых вышек.