自v4.2.0起,新增普通骑行导航功能,支持骑行导航、偏航纠正等功能。
自v4.4.0起,新增电动车骑行导航,即baidumapssdk同时支持普通自行车骑行导航(简称:普通骑行导航)和电动车骑行导航baidumapandroidsdk默认为普通骑行导航,旧版用户不受影响。
1. 步骑行导航的开发包与普通地图服务的开发包下载时区别。
2. 将解压后的开发包中assets目录下的png文件拷贝到您的项目的assets目录下。骑行导航骑包括普通骑行导航和电动车骑行导航两种导航模式,默认为普通骑行导航,旧版用户不受影响。
电动车骑行导航与普通骑行导航的区别:
1、电动车规避电动车禁行路段,避免罚款;普通骑行更适用于自行车。
2、电动车路线规划倾向于走大路,方便寻路,适于快速通行。
3、电动车语音播报返回的文字,针对电动车场景进行优化。
通过设置bikenavilaunchparam对象中的vehicle的值区分:
vehicle :0:普通骑行导航 ; 1:电动车骑行导航。
不设置vehicle的值时,默认为0 普通骑行导航。两种骑行导航模式切换时,除了vehicle参数设置以外,其余骑行导航逻辑均不需要改变。
在使用骑行导航功能前,需要对骑行引擎进行初始化。在初始化成功的回调中调用发起算路的逻辑。
2.在application标签中声明定位的service组件
示例代码如下:
// 获取导航控制类 // 引擎初始化 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; } });