MapBox导航指南后出错

时间:2018-02-03 02:04:26

标签: java android android-studio mapbox mapbox-android

我正在按照MapBox的指南实施导航到Android应用程序。在显示用户位置的最后一步,将以下代码添加到MainActivity.java:

mapView.getMapAsync(new OnMapReadyCallback() {
@Override
public void onMapReady(final MapboxMap mapboxMap) {
    map = mapboxMap;
    enableLocationPlugin();
};
});

运行应用时出现多个错误。 Picture

  1. mapView.getMapAsync有一个无法解决的符号错误。
  2. Android Studio在预期时会被括号弄糊涂的几个错误;或{。
  3. 以下指南我已经导入了所需的所有插件和sdks但是OnMapReadyCallback函数(上面使用过的)的import语句似乎处于非活动状态,因为Android studio告诉我它是一个未使用的import语句。 Picture here
  4. 此错误缺少文档,但Google地图已记录了类似的问题。它们的实现与MapBox的实现不同,因此它们的解决方案不兼容。

    如何解决这些错误,最重要的是能够运行应用程序并继续学习教程指南?

    可以在此处找到完整的MainActivity.Java代码。

        package com.mettre.mettre;
    
    import java.util.List;
    
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    
    import com.mapbox.mapboxsdk.Mapbox;
    import com.mapbox.mapboxsdk.maps.MapView;
    import com.mapbox.mapboxsdk.maps.MapboxMap;
    import com.mapbox.mapboxsdk.maps.OnMapReadyCallback;
    
    // classes needed to add location layer
    import com.mapbox.geojson.Point;
    import com.mapbox.mapboxsdk.maps.MapboxMap;
    import com.mapbox.mapboxsdk.maps.OnMapReadyCallback;
    
    import android.location.Location;
    
    import com.mapbox.mapboxsdk.geometry.LatLng;
    
    import android.support.annotation.NonNull;
    
    import com.mapbox.mapboxsdk.camera.CameraUpdateFactory;
    import com.mapbox.mapboxsdk.plugins.locationlayer.LocationLayerMode;
    import com.mapbox.mapboxsdk.plugins.locationlayer.LocationLayerPlugin;
    import com.mapbox.services.android.location.LostLocationEngine;
    import com.mapbox.services.android.navigation.ui.v5.NavigationViewOptions;
    import com.mapbox.services.android.telemetry.location.LocationEngine;
    import com.mapbox.services.android.telemetry.location.LocationEngineListener;
    import com.mapbox.services.android.telemetry.location.LocationEnginePriority;
    import com.mapbox.services.android.telemetry.permissions.PermissionsListener;
    import com.mapbox.services.android.telemetry.permissions.PermissionsManager;
    
    
    public abstract class MainActivity extends AppCompatActivity implements LocationEngineListener, PermissionsListener{
    
        private MapView mapView;
        // variables for adding location layer
        private MapboxMap map;
        private PermissionsManager permissionsManager;
        private LocationLayerPlugin locationPlugin;
        private LocationEngine locationEngine;
        private Location originLocation;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            Mapbox.getInstance(this, getString(R.string.access_token));
            setContentView(R.layout.activity_main);
            mapView = (MapView) findViewById(R.id.mapView);
            mapView.onCreate(savedInstanceState);
        }
    
        // Add the mapView's own lifecycle methods to the activity's lifecycle methods
        /*@Override
        public void onStart() {
            super.onStart();
            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();
            mapView.onDestroy();
        }
    
        @Override
        protected void onSaveInstanceState(Bundle outState) {
            super.onSaveInstanceState(outState);
            mapView.onSaveInstanceState(outState);
        }
        */
    
        @SuppressWarnings( {"MissingPermission"})
        private void enableLocationPlugin() {
            // Check if permissions are enabled and if not request
            if (PermissionsManager.areLocationPermissionsGranted(this)) {
                // Create an instance of LOST location engine
                initializeLocationEngine();
    
                locationPlugin = new LocationLayerPlugin(mapView, map, locationEngine);
                locationPlugin.setLocationLayerEnabled(LocationLayerMode.TRACKING);
            } else {
                permissionsManager = new PermissionsManager(this);
                permissionsManager.requestLocationPermissions(this);
            }
        }
    
        @SuppressWarnings( {"MissingPermission"})
        private void initializeLocationEngine() {
            locationEngine = new LostLocationEngine(MainActivity.this);
            locationEngine.setPriority(LocationEnginePriority.HIGH_ACCURACY);
            locationEngine.activate();
    
            Location lastLocation = locationEngine.getLastLocation();
            if (lastLocation != null) {
                originLocation = lastLocation;
                setCameraPosition(lastLocation);
            } else {
                locationEngine.addLocationEngineListener(this);
            }
        }
    
        private void setCameraPosition(Location location) {
            map.animateCamera(CameraUpdateFactory.newLatLngZoom(
                    new LatLng(location.getLatitude(), location.getLongitude()), 13));
        }
    
        @Override
        public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
            permissionsManager.onRequestPermissionsResult(requestCode, permissions, grantResults);
        }
    
        @Override
        public void onExplanationNeeded(List<String> permissionsToExplain) {
    
        }
    
        @Override
        public void onPermissionResult(boolean granted) {
            if (granted) {
                enableLocationPlugin();
            } else {
                finish();
            }
        }
    
        @Override
        @SuppressWarnings( {"MissingPermission"})
        public void onConnected() {
            locationEngine.requestLocationUpdates();
        }
    
        @Override
        public void onLocationChanged(Location location) {
            if (location != null) {
                originLocation = location;
                setCameraPosition(location);
                locationEngine.removeLocationEngineListener(this);
            }
        }
    
        @Override
        @SuppressWarnings( {"MissingPermission"})
        protected void onStart() {
            super.onStart();
            if (locationEngine != null) {
                locationEngine.requestLocationUpdates();
            }
            if (locationPlugin != null) {
                locationPlugin.onStart();
            }
            mapView.onStart();
        }
    
        @Override
        protected void onStop() {
            super.onStop();
            if (locationEngine != null) {
                locationEngine.removeLocationUpdates();
            }
            if (locationPlugin != null) {
                locationPlugin.onStop();
            }
            mapView.onStop();
        }
    
        @Override
        protected void onDestroy() {
            super.onDestroy();
            mapView.onDestroy();
            if (locationEngine != null) {
                locationEngine.deactivate();
            }
        }
    
        @Override
        public void onLowMemory() {
            super.onLowMemory();
            mapView.onLowMemory();
        }
    
        @Override
        protected void onResume() {
            super.onResume();
            mapView.onResume();
        }
    
        @Override
        protected void onPause() {
            super.onPause();
            mapView.onPause();
        }
    
        @Override
        protected void onSaveInstanceState(Bundle outState) {
            super.onSaveInstanceState(outState);
            mapView.onSaveInstanceState(outState);
        }
    
        mapView.getMapAsync(new OnMapReadyCallback() {
            @Override
            public void onMapReady(final MapboxMap mapboxMap) {
                map = mapboxMap;
                enableLocationPlugin();
            };
        });
    
    }
    

    Here is the errors from Android Studio when compiling:

0 个答案:

没有答案