【问题标题】:OnRecomputeFinished won't get invokedOnRecomputeFinished 不会被调用
【发布时间】:2018-11-28 16:31:05
【问题描述】:

我正在使用一个侦听器来计算路由,一旦它被代码 thouter Route.Compute(...) 调用,但是当我退出计算的路由时,“OnRecomputeStarted”方法不会触发! 这是我的代码:

Router.RouteComputeListener mRouteComputeListener = new Router.RouteComputeListener() { @覆盖 public void onComputeError(Router router, @Router.RouteComputeError int error) {

        }

        @Override
        public void onProgress(Router router, int progress, int routeIndex) {

            // update progress
        }

        @Override
        public void onComputeStarted(Router router) {
        }

        @SuppressLint("SetTextI18n")
        @Override
        public void onPrimaryComputeFinished(Router router, com.sygic.sdk.route.RouteInfo routeInfo) {

            mapRoutePrimary = new MapRoute(routeInfo, MapRoute.RouteType.Primary); // routeInfo  is obtained via onPrimaryComputeFinished() method in RouteComputeListener
            mpView.addMapObject(mapRoutePrimary);

        }

        @Override
        public void onAlternativeComputeFinished(Router router, com.sygic.sdk.route.RouteInfo routeInfo) {
            mapRouteAlternative = new MapRoute(routeInfo, MapRoute.RouteType.Alternative); // routeInfo  is obtained via onAlternativeComputeFinished() method in RouteComputeListener
            mpView.addMapObject(mapRouteAlternative);

            for (RouteManeuver maneuver : routeInfo.getManeuvers()) {
                directionText.setText(maneuver.getType()+" "+directionText.getText());

            }

        }

        @Override
        public void onComputeFinished(Router router) {
            NavigationManager.getInstance().setRouteForNavigation(mapRoutePrimary.getRouteInfo());
            if (mapRouteAlternative!=null)
                mapRoutePrimary.getRouteInfo().getBoundingBox().union(mapRouteAlternative.getRouteInfo().getBoundingBox());
            Objects.requireNonNull(mpView.getCamera()).setMapRectangleWithMargin(mapRoutePrimary.getRouteInfo().getBoundingBox(),mapAnimation,15,15,15,15);

            NavigationManager.getInstance().addOnDirectionListener(new NavigationManager.OnDirectionListener() {
                @Override
                public void onDirectionInfoChanged(@NonNull DirectionInfo directionInfo) {
                    final int distance = directionInfo.getDistance();
                    final int nextDistance = directionInfo.getNextDistance();

                    final RouteManeuver primaryManeuver = directionInfo.getPrimary();
                    if (primaryManeuver != null) {
                        final int type = primaryManeuver.getType();
                        final String roadName = primaryManeuver.getRoadName();
                        final String nextRoadName = primaryManeuver.getNextRoadName();
                        directionText.setText(roadName);

                        Log.d("directions", "direction of type " + type + " on the road " + roadName + ". Next road is " + nextRoadName);
                        //Toast.makeText(getApplicationContext(), "direction of type " + type + " on the road " + roadName + ". Next road is " + nextRoadName,Toast.LENGTH_LONG).show();
                    }
                }
            });
        }

        @Override
        public void onRecomputeStarted() {
            // called when recompute was invoked. Recompute can be invoked after leaving computed route
            mpView.removeMapObject(mapRoutePrimary);
        }

        @Override
        public void onRecomputeFinished(com.sygic.sdk.route.RouteInfo routeInfo, int i) {
            mpView.removeMapObject(mapRoutePrimary);

            mapRoutePrimary = new MapRoute(routeInfo, MapRoute.RouteType.Primary); 
            mpView.addMapObject(mapRoutePrimary);
        }
    };

【问题讨论】:

    标签: android sygic-mobile-sdk sygic-maps


    【解决方案1】:

    OnRecomputeStarted 正在监听 Router.recomputeRoute() 方法。 您可能需要收听NavigationManager.OnRouteChangedListener。 所以基本上这是代码:

    NavigationManager.getInstance().addOnRouteChangedListener(new NavigationManager.OnRouteChangedListener() {
        @Override
        public void onRouteChanged(final RouteInfo newRouteInfo) {
            mpView.removeMapObject(mapRoutePrimary);
            // set newRouteInfo as new route for navigation...
        }
    });
    

    【讨论】:

    • 我已经尝试过使用那个监听器“addOnRouteChangedListener”,但即使位置根本没有改变,它也会不断被反复调用。
    • 您是否使用NavigationManager.setRouteForNavigation()方法设置了新的导航路线?
    • 尝试在onRouteChanged()方法中调用它来通知NavigationManger你想使用newRoute进行导航
    • 抱歉延迟响应,对于 IOS,recomputeStarted 方法会在我离开计算路径后自动启动,这里肯定有一个与 android 不一致的技巧!我必须每次都听 ROuteChanged 并停止导航并调用 computeRoute 方法
    猜你喜欢
    • 2020-01-26
    • 2020-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-01
    • 2019-03-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多