Карта GPS местоположение не работает - PullRequest
0 голосов

Привет, у меня странная проблема с приложением - когда я использую API Google для определения местоположения пользователя, GPS запускается через секунду и идет, чтобы найти.но если я использую mapbox, это займет до 15 минут, чтобы сделать то, что он делает, затем я должен выключить экран и снова включить, чтобы показать логотип GPS в нижней части экрана, затем выключить и снова включить, чтобы начатьместо нахождения.что может сделать это.Я искал везде в Интернете похожие проблемы, но ничего не нашел.Я использовал все, как описано в http://www.mapbox.com, и проблема все еще существует.Вот код основной деятельности:

import android.arch.lifecycle.Lifecycle;
import android.location.Location;
import android.location.LocationManager;
import android.os.PersistableBundle;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import com.mapbox.android.core.location.LocationEngine;
import com.mapbox.android.core.location.LocationEngineListener;
import com.mapbox.android.core.location.LocationEnginePriority;
import com.mapbox.android.core.location.LocationEngineProvider;
import com.mapbox.android.core.permissions.PermissionsListener;
import com.mapbox.android.core.permissions.PermissionsManager;
import com.mapbox.mapboxsdk.Mapbox;
import com.mapbox.mapboxsdk.camera.CameraUpdateFactory;
import com.mapbox.mapboxsdk.geometry.LatLng;
import com.mapbox.mapboxsdk.maps.MapView;
import com.mapbox.mapboxsdk.maps.MapboxMap;
import com.mapbox.mapboxsdk.maps.OnMapReadyCallback;
import com.mapbox.mapboxsdk.plugins.locationlayer.LocationLayerPlugin;
import com.mapbox.mapboxsdk.plugins.locationlayer.modes.CameraMode;
import com.mapbox.mapboxsdk.plugins.locationlayer.modes.RenderMode;
import java.util.List;
public class MbooooActivity extends AppCompatActivity implements OnMapReadyCallback,
LocationEngineListener, PermissionsListener{
    private MapView mapView;
    private MapboxMap mbm;
    private PermissionsManager permissionsManager;
    private LocationEngine locationEngine;
    private LocationLayerPlugin locationLayerPlugin;
    private Location lokation;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Mapbox.getInstance(this,getString(R.string.toke));
        setContentView(R.layout.activity_mboooo);
        mapView=(MapView)findViewById(R.id.mapView);
        mapView.onCreate(savedInstanceState);
        mapView.getMapAsync(this);
    }
    @Override
    public void onMapReady(MapboxMap mapboxMap) {
        mbm=mapboxMap;
        enableLocation();
    }
    private void enableLocation(){
        if(PermissionsManager.areLocationPermissionsGranted(this)){
            initialiseLocationEngine();
            initialiseLocationLayer();
        }else{
            permissionsManager=new PermissionsManager(this);
            permissionsManager.requestLocationPermissions(this);
        }
    }
    @SuppressWarnings("MissingPermission")
    private void initialiseLocationEngine(){
        locationEngine=new LocationEngineProvider(this).obtainBestLocationEngineAvailable();
        locationEngine.setPriority(LocationEnginePriority.HIGH_ACCURACY);
        locationEngine.activate();
        Location prevlok=locationEngine.getLastLocation();
        if(prevlok!=null){
            lokation=prevlok;
            setCamera(prevlok);
        }else{
            locationEngine.addLocationEngineListener(this);
        }
    }
    @SuppressWarnings("MissingPermission")
    private void initialiseLocationLayer(){
        locationLayerPlugin=new LocationLayerPlugin(mapView,mbm,locationEngine);
        locationLayerPlugin.setLocationLayerEnabled(true);
        locationLayerPlugin.setCameraMode(CameraMode.TRACKING);
        locationLayerPlugin.setRenderMode(RenderMode.NORMAL);
        Lifecycle lifecycle=getLifecycle();
        lifecycle.addObserver(locationLayerPlugin);
    }
    private void setCamera(Location location){
        mbm.animateCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(location.getLatitude(),
                location.getLongitude()),16.0));
    }
    @SuppressWarnings("MissingPermission")
    @Override
    public void onConnected() {
        locationEngine.requestLocationUpdates();
    }
    @Override
    public void onLocationChanged(Location location) {
        if(location!=null){
        lokation=location;
        setCamera(lokation);}
    }
    @Override
    public void onExplanationNeeded(List<String> permissionsToExplain) {
    }
    @Override
    public void onPermissionResult(boolean granted) {
        if(granted){
            enableLocation();
        }
    }
    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
//        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        permissionsManager.onRequestPermissionsResult(requestCode,permissions,grantResults);
    }
    @SuppressWarnings("MissingPermission")
    @Override
    protected void onStart() {
        super.onStart();
        mapView.onStart();
        if(locationEngine!=null){
        locationEngine.requestLocationUpdates();
        locationEngine.addLocationEngineListener(this);}
    }
    @Override
    protected void onPause() {
        super.onPause();
        mapView.onPause();
    }
    @Override
    protected void onDestroy() {
        super.onDestroy();
        if(locationEngine!=null){
        locationEngine.removeLocationEngineListener(this);
        locationEngine.removeLocationUpdates();}
    }
    @Override
    protected void onStop() {
        super.onStop();
        mapView.onStop();
        locationEngine.removeLocationEngineListener(this);
        locationEngine.removeLocationUpdates();
    }
    @Override
    protected void onResume() {
        super.onResume();
        mapView.onResume();
        locationEngine.removeLocationUpdates();
        locationEngine.removeLocationEngineListener(this);
    }
    @Override
    public void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        mapView.onSaveInstanceState(outState);
    }
}

1 Ответ

0 голосов
/ 12 июня 2018

Вы должны слушать обновления местоположения независимо от последнего местоположения:

private void initialiseLocationEngine(){
    locationEngine=new LocationEngineProvider(this).obtainBestLocationEngineAvailable();
    locationEngine.setPriority(LocationEnginePriority.HIGH_ACCURACY);
    locationEngine.activate();
    locationEngine.addLocationEngineListener(this);

    Location prevlok=locationEngine.getLastLocation();
    if(prevlok!=null){
        lokation=prevlok;
        setCamera(prevlok);
    }
}

Дополнительно вы можете установить:

locationEngine.setPriority(LocationEnginePriority.HIGH_ACCURACY);
locationEngine.setInterval(0);
locationEngine.setFastestInterval(1000);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...