自v4.2.0起,新增普通骑行导航功能,支持骑行导航、偏航纠正等功能。
自v4.4.0起,新增电动车骑行导航,即BaiduMapsSDK同时支持普通自行车骑行导航(简称:普通骑行导航)和电动车骑行导航BaiduMapAndroidSDK默认为普通骑行导航,旧版用户不受影响。
1. 步骑行导航的开发包与普通地图服务的开发包下载时区别。
2. 将解压后的开发包中assets目录下的png文件拷贝到您的项目的assets目录下。骑行导航骑包括普通骑行导航和电动车骑行导航两种导航模式,默认为普通骑行导航,旧版用户不受影响。
电动车骑行导航与普通骑行导航的区别:
1、电动车规避电动车禁行路段,避免罚款;普通骑行更适用于自行车。
2、电动车路线规划倾向于走大路,方便寻路,适于快速通行。
3、电动车语音播报返回的文字,针对电动车场景进行优化。
通过设置BikeNaviLaunchParam对象中的vehicle的值区分:
vehicle :0:普通骑行导航 ; 1:电动车骑行导航。
不设置vehicle的值时,默认为0 普通骑行导航。两种骑行导航模式切换时,除了vehicle参数设置以外,其余骑行导航逻辑均不需要改变。
<!-- 这个权限用于访问GPS定位 --> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> <!-- 获取访问手机振动器权限,用于导航过程中的震动提示 --> <uses-permission android:name="android.permission.VIBRATE"/>
在使用骑行导航功能前,需要对骑行引擎进行初始化。在初始化成功的回调中调用发起算路的逻辑。
2.在Application标签中声明定位的service组件
<service android:name="com.baidu.location.f" android:enabled="true" android:process=":remote"/>
示例代码如下:
// 获取导航控制类 // 引擎初始化 BikeNavigateHelper.getInstance().initNaviEngine(this, new IBEngineInitListener() { @Override public void engineInitSuccess() { //骑行导航初始化成功之后的回调 routePlanWithParam(); } @Override public void engineInitFail() { //骑行导航初始化失败之后的回调 } });
//起终点位置 startPt = new LatLng(40.047416,116.312143); endPt = new LatLng(40.048424, 116.313513); //构造BikeNaviLaunchParam //.vehicle(0)默认的普通骑行导航 param = new BikeNaviLaunchParam().stPt(startPt).endPt(endPt).vehicle(0);
在算路成功的回调中跳转至诱导界面,示例代码如下
//发起算路 BikeNavigateHelper.getInstance().routePlanWithParams(param, new IBRoutePlanListener() { @Override public void onRoutePlanStart() { //执行算路开始的逻辑 } @Override public void onRoutePlanSuccess() { //算路成功 //跳转至诱导页面 Intent intent = new Intent(BNaviMainActivity.this, BNaviGuideActivity.class); startActivity(intent); } @Override public void onRoutePlanFail(BikeRoutePlanError bikeRoutePlanError) { //执行算路失败的逻辑 } });
示例代码如下:
//获取BikeNavigateHelper示例 mNaviHelper = BikeNavigateHelper.getInstance(); // 获取诱导页面地图展示View View view = mNaviHelper.onCreate(BNaviGuideActivity.this); if (view != null) { setContentView(view); } // 开始导航 mNaviHelper.startBikeNavi(BNaviGuideActivity.this);
@Override protected void onResume() { super.onResume(); mNaviHelper.resume(); } @Override protected void onPause() { super.onPause(); mNaviHelper.pause(); } @Override protected void onDestroy() { super.onDestroy(); mNaviHelper.quit(); }
完成以上步骤,即可在您的应用实现骑行导航。
效果如图:
通过IBRouteGuidanceListener接口各种回调方法开发者可以对导航状态进行相应处理,主要包括导航开始、到达目的地,导航过程中偏航、偏航规划,诱
导信息(诱导图标、诱导信息、诱导类型、剩余时间、剩余距离、震动等)
示例代码如下:
// 设置诱导监听, 具体诱导信息请参考javadoc类参考 // com.baidu.mapapi.bikenavi.adapter -> IBRouteGuidanceListener mNaviHelper.setRouteGuidanceListener(this, new IBRouteGuidanceListener() { @Override public void onRouteGuideIconUpdate(Drawable icon) { //诱导图标更新 } @Override public void onRouteGuideKind(RouteGuideKind routeGuideKind) { //诱导类型枚举 } @Override public void onRoadGuideTextUpdate(CharSequence charSequence, CharSequence charSequence1) { //诱导信息 } @Override public void onRemainDistanceUpdate(CharSequence charSequence) { //总的剩余距离 } @Override public void onRemainTimeUpdate(CharSequence charSequence) { //总的剩余时间 } @Override public void onGpsStatusChange(CharSequence charSequence, Drawable drawable) { //GPS状态发生变化,来自诱导引擎的消息 } @Override public void onRouteFarAway(CharSequence charSequence, Drawable drawable) { //已经开始偏航 } @Override public void onRoutePlanYawing(CharSequence charSequence, Drawable drawable) { //偏航规划中 } @Override public void onReRouteComplete() { //重新算路成功 } @Override public void onArriveDest() { //到达目的地 } @Override public void onVibrate() { //震动 } @Override public void onGetRouteDetailInfo(BikeRouteDetailInfo bikeRouteDetailInfo) { //获取骑行导航路线详细信息类 } });
SDK只提供导航过程中的文本输出,不包含语音播报功能,需要自行传入对应的语音回调,形成播报功能。建议使用百度语音识别服务SDK。
下载地址: 百度语音识别服务
设置播报监听,使用语音回调播报。
示例代码如下:
mNaviHelper.setTTsPlayer(new IBTTSPlayer() { /** * 获取导航过程中语音,进行播报 * @param s 播报语音文本 * @param b 是否抢占播报 */ @Override public int playTTSText(String s, boolean b) { //调用语音识别SDK的语音回调进行播报 return 0; } });