Я изучаю использование Mapbox на Android.
implementation 'com.mapbox.mapboxsdk:mapbox-android-sdk:6.7.2'
implementation 'com.mapbox.mapboxsdk:mapbox-android-navigation:0.24.1'
implementation 'com.mapbox.mapboxsdk:mapbox-android-plugin-localization:0.5.0'
implementation 'com.mapbox.mapboxsdk:mapbox-android-plugin-annotation:0.3.0'
implementation 'com.mapbox.mapboxsdk:mapbox-android-plugin-traffic:0.6.0'
Все работает, как и ожидалось, за исключением исключительно длительного времени, которое требуется отображаемой карте для отображения точки текущего местоположения устройства.
Есть ли способ улучшить пользовательский опыт?
heres Моя активность
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_rest_rooms);
mapView = findViewById(R.id.fullscreen_content);
mapView.onCreate(savedInstanceState);
mapView.getMapAsync(this);
final LocationEngineProvider locationEngineProvider = new LocationEngineProvider(this);
locationEngine = locationEngineProvider.obtainBestLocationEngineAvailable();
}
private void manageLocationEngine() {
locationEngineListener = new LocationEngineListener() {
@SuppressLint("MissingPermission")
@Override
public void onConnected() {
Log.d(TAG, "onConnected() called");
locationEngine.requestLocationUpdates();
}
@Override
public void onLocationChanged(final Location location) {
Log.d(TAG, "onLocationChanged() called with: location = [" + location + "]");
if (mapboxMap != null) {
mapboxMap.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(location), 16));
}
}
};
locationEngine.addLocationEngineListener(locationEngineListener);
}
/**
*
*/
@SuppressWarnings({"MissingPermission"})
private void enableLocationComponent() {
if (PermissionsManager.areLocationPermissionsGranted(this)) {
manageLocationEngine();
manageLocation();
} else {
permissionsManager = new PermissionsManager(this);
permissionsManager.requestLocationPermissions(this);
}
}
@SuppressLint("MissingPermission")
private void manageLocation() {
final LocationComponentOptions options = LocationComponentOptions.builder(this)
.trackingGesturesManagement(true)
.accuracyColor(ContextCompat.getColor(this, R.color.colorPrimary))
.build();
final LocationComponent locationComponent = mapboxMap.getLocationComponent();
locationComponent.activateLocationComponent(this, options);
locationComponent.setLocationComponentEnabled(true);
locationComponent.setCameraMode(CameraMode.TRACKING);
locationComponent.setRenderMode(RenderMode.COMPASS);
final Location lastLocation = new LocationEngineProvider(this).obtainBestLocationEngineAvailable().getLastLocation();
if (lastLocation != null) {
mapboxMap.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(lastLocation), 16));
}
}
/**
*
* @param requestCode
* @param permissions
* @param grantResults
*/
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
permissionsManager.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
/**
*
* @param permissionsToExplain
*/
@Override
public void onExplanationNeeded(List<String> permissionsToExplain) {
Toast.makeText(this, R.string.user_location_permission_explanation, Toast.LENGTH_LONG).show();
}
/**
*
* @param granted
*/
@Override
public void onPermissionResult(boolean granted) {
if (granted) {
enableLocationComponent();
} else {
Toast.makeText(this, R.string.user_location_permission_not_granted, Toast.LENGTH_LONG).show();
finish();
}
}
@Override
public void onStart() {
super.onStart();
mapView.onStart();
locationEngine.activate();
}
@Override
public void onResume() {
super.onResume();
mapView.onResume();
}
@Override
public void onPause() {
super.onPause();
mapView.onPause();
}
@Override
public void onStop() {
super.onStop();
mapView.onStop();
locationEngine.removeLocationUpdates();
locationEngine.deactivate();
}
@Override
public void onLowMemory() {
super.onLowMemory();
mapView.onLowMemory();
}
@Override
protected void onDestroy() {
super.onDestroy();
mapView.onDestroy();
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
mapView.onSaveInstanceState(outState);
}
@Override
public void onMapReady(final MapboxMap mapboxMap) {
this.mapboxMap = mapboxMap;
this.mapboxMap.addOnMapClickListener(this);
enableLocationComponent();
}