Почему Mapbox на Android занимает много времени для отображения пользователя Location Dot - PullRequest
0 голосов
/ 17 декабря 2018

Я изучаю использование 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();
}
...