我如何使用Mapbox在android中显示我的位置

时间:2018-09-30 13:46:33

标签: android mapbox-android

我想在尝试过的android系统中显示我的位置,但是我不明白为什么它不显示我的位置,但是这里没有显示是我的代码,所以有人可以帮助我。

private MapView mapView;
private MapboxMap map;
LocationEngine locationEngine;
LocationLayerPlugin locationLayerPlugin;
PermissionsManager permissionsManager;
Location originLayout;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Mapbox.getInstance(this, "my key");
    setContentView(R.layout.activity_mabs_map_box);
    mapView = (MapView) findViewById(R.id.mapView);
    mapView.onCreate(savedInstanceState);
    mapView.getMapAsync(this);
}

@Override
public void onMapReady(MapboxMap mapboxMap) {
   /* LocationPluginActivity.this.map = map;
    enableLocationPlugin();*/
    map = mapboxMap;
    locationEnable();
    mapboxMap.getUiSettings().setZoomControlsEnabled(true);
    mapboxMap.getUiSettings().setZoomGesturesEnabled(true);
    mapboxMap.getUiSettings().setScrollGesturesEnabled(true);
    mapboxMap.getUiSettings().setAllGesturesEnabled(true);
}

void locationEnable() {
    if (PermissionsManager.areLocationPermissionsGranted(this)) {
        intialLocationEngine();
        intializLocationLayer();
    } else {
        permissionsManager = new PermissionsManager(this);
        permissionsManager.requestLocationPermissions(this);
    }
}

void intialLocationEngine() {
    locationEngine = new LocationEngineProvider(this).obtainBestLocationEngineAvailable();
    locationEngine.setPriority(LocationEnginePriority.HIGH_ACCURACY);
    locationEngine.activate();
    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
        // TODO: Consider calling
        //    ActivityCompat#requestPermissions
        // here to request the missing permissions, and then overriding
        //   public void onRequestPermissionsResult(int requestCode, String[] permissions,
        //                                          int[] grantResults)
        // to handle the case where the user grants the permission. See the documentation
        // for ActivityCompat#requestPermissions for more details.
        return;
    }
    Location lastLocation = locationEngine.getLastLocation();
    if (lastLocation != null) {
        originLayout = lastLocation;
        setCamerpostion(lastLocation);
    } else {
        locationEngine.addLocationEngineListener(this);
    }

}

void intializLocationLayer() {
    locationLayerPlugin = new LocationLayerPlugin(mapView, map, locationEngine);
    locationLayerPlugin.setLocationLayerEnabled(true);
    locationLayerPlugin.setCameraMode(CameraMode.TRACKING);
    locationLayerPlugin.setRenderMode(RenderMode.NORMAL);
}

void setCamerpostion(Location camerpostion) {
    map.animateCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(camerpostion.getLatitude(), camerpostion.getLongitude()), 13.0));
}

@Override
public void onConnected() {
    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
        return;
    }
    locationEngine.requestLocationUpdates();
}

@Override
public void onLocationChanged(Location location) {
    if (location != null) {
        originLayout = location;
        setCamerpostion(location);
    }
}

@Override
public void onExplanationNeeded(List<String> permissionsToExplain) {

}

@Override
public void onPermissionResult(boolean granted) {
    if (granted) {
        locationEnable();
    }

}

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    permissionsManager.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
@SuppressWarnings("MissingPermission")
@Override
public void onStart() {
    super.onStart();
    if (locationEngine != null)
        locationEngine.requestLocationUpdates();
    mapView.onStart();
}

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

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

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

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

@Override
protected void onDestroy() {
    super.onDestroy();
    if (locationEngine!=null)
    {
        locationEngine.deactivate();
    }        mapView.onDestroy();
}

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

它向我显示了错误

  

java.lang.NullPointerException:尝试调用虚拟方法   '布尔android.os.Bundle.getBoolean(java.lang.String,boolean)'在   空对象引用           在com.mapbox.mapboxsdk.storage.FileSource.getCachePath(FileSource.java:88)           在com.mapbox.mapboxsdk.storage.FileSource.getResourcesCachePath(FileSource.java:188)           在com.mapbox.mapboxsdk.storage.FileSource.getInstance(FileSource.java:66)           在com.mapbox.mapboxsdk.maps.MapView.onStart(MapView.java:365)           在 com.example.mapsconfig.MabsMapBox.onStart(MabsMapBox.java:148)           在android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1249)           在android.app.Activity.performStart(Activity.java:6886)           在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2684)           在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2782)           在android.app.ActivityThread.-wrap12(ActivityThread.java)           在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1521)           在android.os.Handler.dispatchMessage(Handler.java:102)           在android.os.Looper.loop(Looper.java:163)           在android.app.ActivityThread.main(ActivityThread.java:6228)           在java.lang.reflect.Method.invoke(本机方法)           在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:904)           在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:794)

0 个答案:

没有答案