快速开始

实现导航功能的最基本的步骤包括:初始化、路径规划、开启导航以及结束导航。

初始化

// 初始化导航控制类
TencentCarNaviManager carNavManager = new TencentCarNaviManager(context.getApplicationContext());
// 导航视图 com.tencent.map.navi.car.CarNaviView
CarNaviView mCarNaviView = findViewById(R.id.tnk_car_navi_view);
// 将视图与控制器关联
carNavManager.addNaviView(mCarNaviView);

// 开启语音播报模块
carNavManager.setInternalTtsEnabled(true);
// 开启导航视野自动比例尺
carNavManager.setAutoScaleEnabled(true);

// 导航UI类初始化,用于显示默认导航UI,包括导航面板,路线,车标,起终点等
CarNaviInfoPanel carNaviInfoPanel = mCarNaviView.showNaviInfoPanel();
// 默认面板退出按钮监听
carNaviInfoPanel.setOnNaviInfoListener(() -> { 
     });

// 注册TencentNaviCallback/INaviView监听,用以接收导航信息、导航事件的回调

carNavManager.addTencentNaviCallback(new TencentNaviCallback() {
    @Override
    public void onStartNavi() {
        // 开启导航
    }

    @Override
    public void onStopNavi() {
        // 关闭导航
    }

    @Override
    public void onOffRoute() {
        // 发生偏航
    }

    @Override
    public void onRecalculateRouteSuccess(int recalculateType,
                                          ArrayList<RouteData> routeDataList) {
        // 路线重新规划成功

    }

    @Override
    public void onRecalculateRouteSuccessInFence(int recalculateType) {
        // 获取重新算路请求成功,但当前位置无路网数据,无法获得新路线
    }

    @Override
    public void onRecalculateRouteFailure(int recalculateType,
                                          int errorCode,
                                          String errorMessage) {
        // 路线重新规划失败

    }

    @Override
    public void onRecalculateRouteStarted(int recalculateType) {
        // 路线重新规划开始
    }

    @Override
    public void onRecalculateRouteCanceled() {
        // 路线重新规划取消
    }

    @Override
    public void onArrivedDestination() {
        // 到达目的地回调. 如果尚未结束导航, 这个方法可能执行多次
    }

    @Override
    public void onPassedWayPoint(int passPointIndex) {
        // 经过途经点的回调
    }

    @Override
    public void onUpdateRoadType(int roadType) {
        // [废弃] 路段类型切换提示 @since 5.2.8
    }

    @Override
    public void onUpdateParallelRoadStatus(ParallelRoadStatus parallelRoadStatus) {
        // 获取切换平行路状态更新回调
    }

    @Override
    public void onUpdateAttachedLocation(AttachedLocation location) {
        // 更新吸附点回调
    }

    @Override
    public void onFollowRouteClick(String routeId,
                                   ArrayList<LatLng> latLngArrayList) {
        // 点击伴随路线回调

    }

    @Override
    public int onVoiceBroadcast(NaviTts tts) {
        // 语音播报的回调
        // 0 : 表示该条语音文本没有被成功播报。则导航SDK认为该条语音没有被成功播报,
        // 会在合适的时机再次返回该条播报内容。
        // 1 : 表示播报成功
        return 0;
    }
});

carNavManager.addNaviView(new INaviView() {
    @Override
    public void onUpdateNavigationData(NavigationData data) {
        // 导航面板相关数据数据更新
    }

    @Override
    public void onShowEnlargedIntersection(Bitmap bitmap) {
        // 路口放大图显示的回调
    }

    @Override
    public void onHideEnlargedIntersection() {
        // 路口放大图隐藏的回调
    }

    @Override
    public void onShowGuidedLane(Bitmap lane) {
        // 车道线显示的回调
    }

    @Override
    public void onShowGuidedLaneInfo(GuidedLaneInfo info) {
        // 车道线信息回调
    }

    @Override
    public void onHideGuidedLane() {
        // 车道线隐藏的回调
    }

    @Override
    public void onSmartLocStart() {
        // 智能定位的开启回调
    }

    @Override
    public void onSmartLocEnd() {
        // 智能定位的结束回调
    }

    @Override
    public void onGpsRssiChanged(int rssi) {
        // GPS信号变化回调
    }

    @Override
    public void onGpsWeakNotify() {
        // gps信号弱回调
    }

    @Override
    public void onGpsStrongNotify() {
        // gps恢复回调
    }

    @Override
    public void onRouteDidChange(RouteData route,
                                 ArrayList<TrafficItem> trafficItems) {
        // 当前导航路线切换的回调
    }

    @Override
    public void onDeleteBackupRoutes(ArrayList<String> deletedRouteIDs) {
        // 开启多路线功能时,经过分歧点时删除的备选路线
    }

    @Override
    public void onAddBackupRoutes(ArrayList<RouteData> routes) {
        // 开启多路线功能时,补充的伴随路线
    }

    @Override
    public void onUpdateTraffic(String routeId,
                                int totalDistance,
                                int leftDistance,
                                ArrayList<LatLng> points,
                                ArrayList<TrafficItem> trafficItems,
                                boolean isCurrent) {
        // 更新导航路线的路况
    }

    @Override
    public void onUpdateTraffic(RouteTrafficStatus routeTrafficStatus) {
        // 当前路线路况更新
    }

    @Override
    public void onUpdateBackupRoutesTraffic(ArrayList<RouteTrafficStatus> routeTrafficStatusList) {
        // 备选路线路况更新
    }
});

路径规划

/// 起点
NaviPoi start = new naviPoi(39.926296,116.309901);

/// 终点
NaviPoi dest = new naviPoi(39.917834,116.397271);
// poi id和名称可以通过webservice api检索功能获取,
// 详见https://lbs.qq.com/service/webService/webServiceGuide/webServiceSuggestion
dest.setPoiId("8314157447236438749");
dest.setPoiName("天安门广场");

// 途径点
ArrayList<NaviPoi> wayPoints = new Array<>();
wayPoints.add(new NaviPoi(40.041032,116.27245));

/// 算路参数
CarRouteSearchOptions option = CarRouteSearchOptions.create();
option.naviScene(2); // 送驾
//option.preLocations(List<GpsLocation>); // 设置前序点,提升起点准确性

// 发起驾车导航路线规划,途径点可为空
carNavManager.searchRoute(start, dest, waypoints, option, TencentRouteSearchCallback);
// 可在该TencentRouteSearchCallback 回调中判断是否算路成功。
// 若算路成功,可通过result获得路线数据,通过地图SDK绘制路线

开启导航

开启真实导航

// 使用算路获取的第一条路线导航
carNavManager.startNavi(0);
​
// 另一个api,使用算路得到的路线id开启导航
carNavManager.startNaviWithRouteID("xxxxxxx");

开启模拟导航,测试时使用

// 使用算路获取的第一条路线导航
carNavManager.startSimulateNavi(0);

结束导航

// 结束导航
carNavManager.stopNavi();
// 结束模拟导航
carNavManager.stopSimulateNavi();