实现导航功能的最基本的步骤包括:初始化、路径规划、开启导航以及结束导航。
// 初始化导航控制类
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();
有帮助
没帮助