Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/208.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Mapbox导航useroffroute功能覆盖不起作用_Java_Android_Navigation_Mapbox - Fatal编程技术网

Java Mapbox导航useroffroute功能覆盖不起作用

Java Mapbox导航useroffroute功能覆盖不起作用,java,android,navigation,mapbox,Java,Android,Navigation,Mapbox,未触发偏离路线 我正在使用导航启动器。我也尝试过使用导航视图。但是没有触发useroffroute函数 package com.example.lenovo.offroutetest; import java.io.File; import java.io.FileOutputStream; import java.util.List; import android.os.Bundle; import android.support.design.widget.CoordinatorLayou

未触发偏离路线

我正在使用导航启动器。我也尝试过使用导航视图。但是没有触发useroffroute函数

package com.example.lenovo.offroutetest;

import java.io.File;
import java.io.FileOutputStream;
import java.util.List;
import android.os.Bundle;
import android.support.design.widget.CoordinatorLayout;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
// classes needed to initialize map
import com.mapbox.mapboxsdk.Mapbox;
import com.mapbox.mapboxsdk.maps.MapView;
// classes needed to add the location component
import com.mapbox.geojson.Point;
import com.mapbox.mapboxsdk.maps.MapboxMap;
import com.mapbox.mapboxsdk.maps.OnMapReadyCallback;
import android.location.Location;
import android.widget.Toast;
import com.mapbox.mapboxsdk.geometry.LatLng;
import android.support.annotation.NonNull;
import com.mapbox.mapboxsdk.location.LocationComponent;
import com.mapbox.mapboxsdk.location.modes.CameraMode;
import com.mapbox.services.android.navigation.ui.v5.NavigationLauncherOptions;
import com.mapbox.android.core.permissions.PermissionsListener;
import com.mapbox.android.core.permissions.PermissionsManager;
// classes needed to add a marker
import com.mapbox.mapboxsdk.annotations.Marker;
import com.mapbox.mapboxsdk.annotations.MarkerOptions;
// classes to calculate a route
import com.mapbox.services.android.navigation.ui.v5.NavigationView;
import com.mapbox.services.android.navigation.ui.v5.NavigationViewOptions;
import com.mapbox.services.android.navigation.ui.v5.route.NavigationMapRoute;
import com.mapbox.services.android.navigation.v5.instruction.Instruction;
import com.mapbox.services.android.navigation.v5.milestone.BannerInstructionMilestone;
import com.mapbox.services.android.navigation.v5.milestone.Milestone;
import com.mapbox.services.android.navigation.v5.milestone.MilestoneEventListener;
import com.mapbox.services.android.navigation.v5.milestone.RouteMilestone;
import com.mapbox.services.android.navigation.v5.milestone.Trigger;
import com.mapbox.services.android.navigation.v5.milestone.TriggerProperty;
import com.mapbox.services.android.navigation.v5.navigation.MapboxNavigation;
import com.mapbox.services.android.navigation.v5.navigation.MapboxNavigationOptions;
import com.mapbox.services.android.navigation.v5.navigation.NavigationRoute;
import com.mapbox.api.directions.v5.models.DirectionsResponse;
import com.mapbox.api.directions.v5.models.DirectionsRoute;
import com.mapbox.services.android.navigation.v5.offroute.OffRouteListener;
import com.mapbox.services.android.navigation.v5.routeprogress.RouteProgress;
import com.mapbox.services.android.navigation.v5.routeprogress.ProgressChangeListener;
import com.mapbox.services.android.navigation.v5.routeprogress.RouteProgress;
import com.mapbox.services.android.navigation.v5.navigation.NavigationEventListener;

import okhttp3.Route;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import android.util.Log;
// classes needed to launch navigation UI
import android.view.View;
import android.widget.Button;
import com.mapbox.services.android.navigation.ui.v5.NavigationLauncher;

import org.intellij.lang.annotations.Identifier;

public class MainActivity extends AppCompatActivity implements OnMapReadyCallback, MapboxMap.OnMapClickListener, OffRouteListener,PermissionsListener,MilestoneEventListener, ProgressChangeListener,NavigationEventListener{
    private MapView mapView;
    // variables for adding location layer
    private MapboxMap mapboxMap;
    private PermissionsManager permissionsManager;
    private Location originLocation;
    // variables for adding a marker
    private Marker destinationMarker;
    private LatLng originCoord;
    private LatLng destinationCoord;
    // variables for calculating and drawing a route
    private Point originPosition;
    private Point destinationPosition;
    private DirectionsRoute currentRoute;
    private static final String TAG = "DirectionsActivity";
    private NavigationMapRoute navigationMapRoute;
    private Button button;
    private MapboxNavigation navigation;
    private NavigationView navigationView;
    private CoordinatorLayout coordinatorLayout;
    private boolean running;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Mapbox.getInstance(this,"pk.eyJ1IjoicHJpeWFuZ2EiLCJhIjoiY2pwYzQ1OGxpMGgybTNscGhsbjA0cXlvcSJ9.MJD97KhqBQifpKRrPGtomg");
        //MapboxNavigationOptions options = MapboxNavigationOptions.builder().isDebugLoggingEnabled(true).build();
        //MapboxNavigationOptions opt=MapboxNavigationOptions.builder().build()
        navigation=new MapboxNavigation(MainActivity.this,"pk.eyJ1IjoicHJpeWFuZ2EiLCJhIjoiY2pwYzQ1OGxpMGgybTNscGhsbjA0cXlvcSJ9.MJD97KhqBQifpKRrPGtomg");
        //navigation.addOffRouteListener(offRouteListener);
        //navigation.addMilestoneEventListener(this);
        navigation.addMilestone(new BannerInstructionMilestone.Builder().setIdentifier(1).setTrigger(Trigger.all(Trigger.eq(TriggerProperty.LAST_STEP, TriggerProperty.TRUE))).setInstruction(new Instruction() {
            @Override
            public String buildInstruction(RouteProgress routeProgress) {

                return "I AM HERE";
            }
        }).build());
        setContentView(R.layout.activity_main);
        mapView = findViewById(R.id.mapView);
        //navigationView=findViewById(R.id.navigationView);
        //navigationView.onCreate(savedInstanceState);
        //navigationView.initialize(this);
        mapView.onCreate(savedInstanceState);
        mapView.getMapAsync(this);
    }

    @Override
    public void onMilestoneEvent(RouteProgress routeProgress, String instruction, Milestone milestone) {
        //exampleInstructionPlayer.play(instruction);
        Log.e("milestone","reached");
        Toast.makeText(getApplicationContext(),"Milestone triggered",Toast.LENGTH_SHORT).show();
    }
    @Override
    public void onMapReady(MapboxMap mapboxMap) {
        this.mapboxMap = mapboxMap;
        enableLocationComponent();
        originCoord = new LatLng(originLocation.getLatitude(), originLocation.getLongitude());
        mapboxMap.addOnMapClickListener(this);
        button = findViewById(R.id.startButton);
        /*navigation.addOffRouteListener(new OffRouteListener() {
            @Override
            public void userOffRoute(Location location) {
                Snackbar snackbar = Snackbar
                        .make(coordinatorLayout, "User rerouting", Snackbar.LENGTH_LONG);
                snackbar.show();
                Toast.makeText(getApplicationContext(), "Off route", Toast.LENGTH_SHORT).show();
                //File path = getApplicationContext().getFilesDir();
                //File path=getApplicationContext().getExternalFilesDir(null);
                try {
                    File path=getApplicationContext().getFilesDir();
                    Toast.makeText(getApplicationContext(),String.valueOf(path),Toast.LENGTH_SHORT).show();
                    File file = new File(path, "off_route.txt");
                    FileOutputStream stream = new FileOutputStream(file);
                    stream.write(("Offroute"+location.toString()).getBytes());
                    stream.close();
                }
                catch(Exception e)
                {
                    e.printStackTrace();
                }
            }
        });*/
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //NavigationViewOptions navopt=NavigationViewOptions.builder().directionsRoute(currentRoute).shouldSimulateRoute(false).build();
                boolean simulateRoute = false;
                NavigationLauncherOptions options = NavigationLauncherOptions.builder()
                        .directionsRoute(currentRoute)
                        .shouldSimulateRoute(simulateRoute)
                        .build();
                // Call this method with Context from within an Activity
                NavigationLauncher.startNavigation(MainActivity.this, options);
                //navigation.startNavigation(currentRoute);
                //navigation.startNavigation(currentRoute);
                //navigationView.startNavigation(navopt);
            }
        });
    }

    @Override
    public void onProgressChange(Location location, RouteProgress routeProgress)
    {

    }

    @Override
    public void onMapClick(@NonNull LatLng point){
        if (destinationMarker != null) {
            mapboxMap.removeMarker(destinationMarker);
        }
        destinationCoord = point;
        destinationMarker = mapboxMap.addMarker(new MarkerOptions()
                .position(destinationCoord)
        );
        destinationPosition = Point.fromLngLat(destinationCoord.getLongitude(), destinationCoord.getLatitude());
        originPosition = Point.fromLngLat(originCoord.getLongitude(), originCoord.getLatitude());
        getRoute(originPosition, destinationPosition);
        button.setEnabled(true);
        button.setBackgroundResource(R.color.mapboxBlue);
        /*try {
            //File path=getApplicationContext().getFilesDir();
            File path=getApplicationContext().getExternalFilesDir(null);
            Toast.makeText(getApplicationContext(),String.valueOf(path.getAbsolutePath()),Toast.LENGTH_SHORT).show();
            //File path = getApplicationContext().getExternalFilesDir(null);
            File file = new File(path, "off_route.txt");
            //Log.e("Writing to file","file");
            FileOutputStream stream = new FileOutputStream(file);
            stream.write("Offroute am there".getBytes());
            Toast.makeText(getApplicationContext(),"I ma here",Toast.LENGTH_LONG).show();
            stream.close();
        }
        catch (Exception e)
        {
            Toast.makeText(getApplicationContext(),e.toString(),Toast.LENGTH_LONG).show();
            e.printStackTrace();
        }*/

    }

    @Override
    public void userOffRoute(Location location) {
        //Snackbar snackbar = Snackbar
          //      .make(coordinatorLayout, "User rerouting", Snackbar.LENGTH_LONG);
        //snackbar.show();
        Toast.makeText(getApplicationContext(), "Off route detected.........", Toast.LENGTH_SHORT).show();
        //File path = getApplicationContext().getFilesDir();
        //File path=getApplicationContext().getExternalFilesDir(null);
        try {
            File path=getApplicationContext().getExternalFilesDir(null);
            Toast.makeText(getApplicationContext(),String.valueOf(path),Toast.LENGTH_SHORT).show();
            File file = new File(path, "useroff.txt");
            FileOutputStream stream = new FileOutputStream(file);
            stream.write(("Offroute"+location.toString()).getBytes());
            stream.close();
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
    }
    @Override

    public void onRunning(boolean running)
    {
        this.running=running;
        if(running)
        {
            //navigation.addOffRouteListener(this);
            //navigation.addProgressChangeListener(this);
        }
    }



    private void getRoute(Point origin, Point destination) {
        NavigationRoute.builder(this)
                .accessToken(Mapbox.getAccessToken())
                .origin(origin)
                .destination(destination)
                .build()
                .getRoute(new Callback<DirectionsResponse>() {
                    @Override
                    public void onResponse(Call<DirectionsResponse> call, Response<DirectionsResponse> response) {
                        // You can get the generic HTTP info about the response
                        Log.d(TAG, "Response code: " + response.code());
                        if (response.body() == null) {
                            Log.e(TAG, "No routes found, make sure you set the right user and access token.");
                            return;
                        } else if (response.body().routes().size() < 1) {
                            Log.e(TAG, "No routes found");
                            return;
                        }

                        currentRoute = response.body().routes().get(0);

                        // Draw the route on the map
                        if (navigationMapRoute != null) {
                            navigationMapRoute.removeRoute();
                        } else {
                            navigationMapRoute = new NavigationMapRoute(navigation, mapView, mapboxMap, R.style.NavigationMapRoute);
                        }
                        navigationMapRoute.addRoute(currentRoute);
                    }

                    @Override
                    public void onFailure(Call<DirectionsResponse> call, Throwable throwable) {
                        Log.e(TAG, "Error: " + throwable.getMessage());
                    }
                });
    }

    @SuppressWarnings( {"MissingPermission"})
    private void enableLocationComponent() {
        // Check if permissions are enabled and if not request
        if (PermissionsManager.areLocationPermissionsGranted(this)) {
            // Activate the MapboxMap LocationComponent to show user location
            // Adding in LocationComponentOptions is also an optional parameter
            LocationComponent locationComponent = mapboxMap.getLocationComponent();
            locationComponent.activateLocationComponent(this);
            locationComponent.setLocationComponentEnabled(true);
            // Set the component's camera mode
            locationComponent.setCameraMode(CameraMode.TRACKING);
            originLocation = locationComponent.getLastKnownLocation();

        } 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, R.string.user_location_permission_explanation, Toast.LENGTH_LONG).show();
    }

    @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
    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();
    }




}
package com.example.lenovo.offroutetest;
导入java.io.File;
导入java.io.FileOutputStream;
导入java.util.List;
导入android.os.Bundle;
导入android.support.design.widget.CoordinatorLayout;
导入android.support.design.widget.Snackbar;
导入android.support.v7.app.AppActivity;
//初始化映射所需的类
导入com.mapbox.mapboxsdk.mapbox;
导入com.mapbox.mapboxsdk.maps.MapView;
//添加位置组件所需的类
导入com.mapbox.geojson.Point;
导入com.mapbox.mapboxsdk.maps.MapboxMap;
导入com.mapbox.mapboxsdk.maps.OnMapReadyCallback;
导入android.location.location;
导入android.widget.Toast;
导入com.mapbox.mapboxsdk.geometry.LatLng;
导入android.support.annotation.NonNull;
导入com.mapbox.mapboxsdk.location.LocationComponent;
导入com.mapbox.mapboxsdk.location.modes.CameraMode;
导入com.mapbox.services.android.navigation.ui.v5.NavigationLauncherOptions;
导入com.mapbox.android.core.permissions.PermissionsListener;
导入com.mapbox.android.core.permissions.PermissionsManager;
//类需要添加标记
导入com.mapbox.mapboxsdk.annotations.Marker;
导入com.mapbox.mapboxsdk.annotations.MarkerOptions;
//类来计算路线
导入com.mapbox.services.android.navigation.ui.v5.NavigationView;
导入com.mapbox.services.android.navigation.ui.v5.NavigationViewOptions;
导入com.mapbox.services.android.navigation.ui.v5.route.NavigationMapRoute;
导入com.mapbox.services.android.navigation.v5.instruction.instruction;
导入com.mapbox.services.android.navigation.v5.milestone.banner构建里程碑;
导入com.mapbox.services.android.navigation.v5.milestone.milestone;
导入com.mapbox.services.android.navigation.v5.MilestoneEventListener;
导入com.mapbox.services.android.navigation.v5.milestone.RouteMilstone;
导入com.mapbox.services.android.navigation.v5.milestone.Trigger;
导入com.mapbox.services.android.navigation.v5.milestone.TriggerProperty;
导入com.mapbox.services.android.navigation.v5.navigation.MapboxNavigation;
导入com.mapbox.services.android.navigation.v5.navigation.MapboxNavigationOptions;
导入com.mapbox.services.android.navigation.v5.navigation.NavigationRoute;
导入com.mapbox.api.directions.v5.models.DirectionsResponse;
导入com.mapbox.api.directions.v5.models.DirectionsRoute;
导入com.mapbox.services.android.navigation.v5.offroute.OffRouteListener;
导入com.mapbox.services.android.navigation.v5.routeprogress.routeprogress;
导入com.mapbox.services.android.navigation.v5.routeprogress.ProgressChangeListener;
导入com.mapbox.services.android.navigation.v5.routeprogress.routeprogress;
导入com.mapbox.services.android.navigation.v5.navigation.NavigationEventListener;
导入okhttp3.路由;
2.电话;;
2.回拨;
2.回应;;
导入android.util.Log;
//启动导航UI所需的类
导入android.view.view;
导入android.widget.Button;
导入com.mapbox.services.android.navigation.ui.v5.NavigationLauncher;
导入org.intellij.lang.annotations.Identifier;
公共类MainActivity扩展AppCompativeActivity在MapReadyCallback、MapboxMap.OnMapClickListener、OffRouteListener、PermissionsListener、MilestoneEventListener、ProgressChangeListener、NavigationEventListener上实现{
私有地图视图;
//用于添加位置层的变量
私有MapboxMap MapboxMap;
私人许可证管理人许可证管理人;
私密区位;原始区位;
//用于添加标记的变量
专用标记机;目的地标记机;
私人LatLng OrigingCoord;
私人拉丁语目的语;
//用于计算和绘制路线的变量
私有点原点;
专用点定位;
专用方向路由当前路由;
私有静态最终字符串TAG=“DirectionsActivity”;
专用导航地图路线导航地图路线;
私人按钮;
私人地图箱导航;
私有导航视图导航视图;
私人协调人布局协调人布局;
私有布尔运行;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
getInstance(这是“pk.eyj1ijoichjpewfuzz2eilcjhijoy2pwyzq1ogxpmggybtnschghsbja0cxlvcsj9.mjd97khqbqifpkrpgtomg”);
//MapboxNavigationOptions=MapboxNavigationOptions.builder().IsDebuggingEnabled(true.build();
//MapboxNavigationOptions opt=MapboxNavigationOptions.builder().build()
导航=新的MapboxNavigation(主要活动,即“pk.eyj1ijoichjpewfuzz2eilchijoi2pwyzq1ogxpmggybtnscghsbja0cxlvcsj9.mjd97khqbqifpkrpgtomg”);
//导航。添加路由侦听器(路由侦听器);
//navigation.addMilestoneEventListener(此);
navigation.addMilestone(新建BannerInstructionMilestone.Builder().setIdentifier(1).setTrigger(Trigger.all(Trigger.eq(TriggerProperty.LAST_STEP,TriggerProperty.TRUE))).setInstruction(新建指令(){
@凌驾
公共字符串构建指令(RouteProgress RouteProgress){
返回“我在这里”;
}
}).build());
setContentView(R.layout.activity_main);
mapView=findViewById(R.id.mapView);
//navigationView=findViewById(R.id.navigationView);
//navigationView.onCreate(savedInstanceState);
//navigationView.initialize(这个);
onCreate(savedInstanceState);
getMapAsync(这个);
}
@凌驾
公共void onMilestoneEvent(RouteProgress RouteProgress、字符串指令、里程碑){
//示例InstructionPlayer.play(指令);
Log.e(“里程碑”,“达成”);
Toast.makeText(
navigation.addOffRouteListener(new OffRouteListener() {
    @Override
    public void userOffRoute(Location location) {
        Toast.makeText(getApplicationContext(), "Off route detected.........", Toast.LENGTH_SHORT).show();
        // Make sure you call for a new DirectionsRoute object
        // and end by calling MapboxNavigation#startNavigation on a successful
    }
});