почему моя карта приложения не центрируется в координатах GPS? - PullRequest
0 голосов
/ 10 января 2019

Я пытаюсь создать приложение для Android, используя mapbox, в котором система отслеживает текущее местоположение пользователя. Когда приложение запускается, оно центрируется правильно, используя текущие координаты GPS. Когда я пытаюсь изменить текущий GPS с помощью эмулятора Android, синяя точка меняется, но карта не центрируется в измененном положении ... Что я могу сделать? Вот мой код!

public class MainActivity extends AppCompatActivity implements
            OnMapReadyCallback, PermissionsListener {
    private PermissionsManager permissionsManager;
    private MapboxMap mapboxMap;
    private MapView mapView;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // Mapbox access token is configured here. This needs to be called either in your application
    // object or in the same activity which contains the mapview.
    Mapbox.getInstance(this, getString(R.string.access_token));

    // This contains the MapView in XML and needs to be called after the access token is configured.
    setContentView(R.layout.activity_main);

    mapView = findViewById(R.id.mapView);
    mapView.onCreate(savedInstanceState);
    mapView.getMapAsync(this);
}

@Override
public void onMapReady(MapboxMap mapboxMap) {
    MainActivity.this.mapboxMap = mapboxMap;
    enableLocationComponent();
}

// @SuppressLint("WrongConstant")
    @SuppressWarnings( {"MissingPermission"})
private void enableLocationComponent() {
    // Check if permissions are enabled and if not request
    if (PermissionsManager.areLocationPermissionsGranted(this)) {

        // Get an instance of the component
        LocationComponent locationComponent = mapboxMap.getLocationComponent();

        // Activate
        locationComponent.activateLocationComponent(this);

        // Enable to make component visible
        locationComponent.setLocationComponentEnabled(true);

        // Set the component's camera mode
        locationComponent.setCameraMode(CameraMode.TRACKING_GPS);

        // Set the component's render mode
        locationComponent.setRenderMode(RenderMode.COMPASS);
    } else {
        permissionsManager = new PermissionsManager(this);
        permissionsManager.requestLocationPermissions(this);
    }
}

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    permissionsManager.onRequestPermissionsResult(requestCode, permissions, grantResults);
}

@Override
public void onExplanationNeeded(List<String> permissionsToExplain) {
    Toast.makeText(this, "This app needs location permissions in order to show its functionality", Toast.LENGTH_LONG).show();
}

@Override
public void onPermissionResult(boolean granted) {
    if (granted) {
        enableLocationComponent();
    } else {
        Toast.makeText(this, "You didn't grant location permissions.", Toast.LENGTH_LONG).show();
        finish();
    }
}

@Override
@SuppressWarnings( {"MissingPermission"})
protected void onStart() {
    super.onStart();
    mapView.onStart();
}

@Override
protected void onResume() {
    super.onResume();
    mapView.onResume();
}

@Override
protected void onPause() {
    super.onPause();
    mapView.onPause();
}

@Override
protected void onStop() {
    super.onStop();
    mapView.onStop();
}

@Override
protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    mapView.onSaveInstanceState(outState);
}

@Override
protected void onDestroy() {
    super.onDestroy();
    mapView.onDestroy();
}

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

Ответы [ 2 ]

0 голосов
/ 10 января 2019

Я бы порекомендовал собрать ваше приложение на физическом устройстве, чтобы увидеть, будет ли оно работать так же, когда оно получает обновления местоположения. Ваш код кажется правильным, но службы определения местоположения могут иногда быть привередливыми, когда вы создаете их в эмуляторе Android Studio.

0 голосов
/ 10 января 2019

Я никогда не использовал mapBox, я парень из libgdx.

Несмотря на это, я думаю, вы должны предоставить слушателя, который будет прослушивать изменения GEOLOCATION и центрировать камеру на точке.

Не знаю никакой кодировки в mapbox, но это может выглядеть так:

if(GEOLOCATION_CHANGE > someValue){
camera.setPosition(x,y);    or   map.setPosition(x,y);   //can change cam or map pos
or  camera.setPosition(blueDot.getX(),blueDot.gety());}
...