Ich verwende MapBox auf Android (getestet mit Nexus 5x auf 7.0 und 7.1) mit einer recht einfachen Einrichtung (siehe unten). Die seltsame Sache ist, dass die Karte beginnt zu driften, wenn das Telefon sich nicht bewegt oder benutzt wird, als ob ich herumlaufen würde. Das folgende Codebeispiel ist das zu replizierende Minimum. Ich habe einen zusätzlichen Standort-Listener hinzugefügt und ihn auch an Mapbox angehängt. Das Interessante daran ist, dass wenn ich driftet, keine Logs für den Standortwechsel kommen, was mich glauben macht, dass es ein Fehler im Mapbox SDK (4.1.1) ist.Mapbox my-location drift android
Irgendwelche Gedanken darüber, was könnte passieren?
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());
}
}
Das Layout ist:
<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"/>