自v4.4.0起,新增步行导航功能,支持普通步行导航、步行AR导航、偏航纠正等导航功能。
自v5.0.0起,支持全球200多个国家和地区的步行导航,无需单独申请即可直接使用。
自V7.5.4起,地图SDK升级步行导航AR功能,优化AR步行导航可视化效果。
注:步行导航AR模式不支持手机横屏,升级后的AR步行导航支持Android 5.0以上的机型。
注意:
1. 步骑行导航的开发包与普通地图服务的开发包下载时区别。
2. 将解压后的开发包中 assets 目录下的 png 文件拷贝到您的项目的 assets 目录下。
<!-- 这个权限用于访问GPS定位 --> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> <!-- 获取访问手机振动器权限,用于导航过程中的震动提示 --> <uses-permission android:name="android.permission.VIBRATE"/> <!-- 获取摄像头权限,用于AR步行导航 --> <uses-permission android:name="android.permission.CAMERA" />
使用步行导航前需要对步行导航引擎初始化。
示例代码如下:
// 获取导航控制类 // 引擎初始化 WalkNavigateHelper.getInstance().initNaviEngine(this, new IWEngineInitListener() { @Override public void engineInitSuccess() { //引擎初始化成功的回调 routeWalkPlanWithParam(); } @Override public void engineInitFail() { //引擎初始化失败的回调 } });
示例代码如下:
//起终点位置 startPt = new LatLng(40.047416,116.312143); endPt = new LatLng(40.048424, 116.313513); //构造WalkNaviLaunchParam mParam = new WalkNaviLaunchParam().stPt(startPt).endPt(endPt);
//发起算路 WalkNavigateHelper.getInstance().routePlanWithParams(mParam, new IWRoutePlanListener() { @Override public void onRoutePlanStart() { //开始算路的回调 } @Override public void onRoutePlanSuccess() { //算路成功 //跳转至诱导页面 Intent intent = new Intent(BNaviMainActivity.this, WNaviGuideActivity.class); startActivity(intent); } @Override public void onRoutePlanFail(WalkRoutePlanError walkRoutePlanError) { //算路失败的回调 } });
示例代码如下:
//获取WalkNavigateHelper实例 mNaviHelper = WalkNavigateHelper.getInstance(); //获取诱导页面地图展示View View view = mNaviHelper.onCreate(WNaviGuideActivity.this); if (view != null) { setContentView(view); } mNaviHelper.startWalkNavi(WNaviGuideActivity.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(); }
完成以上步骤,即可在您的应用中实现基本的步行导航功能,效果如图:
AndroidManifest配置
使用AR步行导航,需要在AndroidManifest中配置Camera权限:
<uses-permission android:name="android.permission.CAMERA" />
申请Camera权限
使用AR步行导航,需要在步行诱导页面的Activity中添加Camera权限申请的回调函数
@Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); if (requestCode == ArCameraView.WALK_AR_PERMISSION) { if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { mNaviHelper.startCameraAndSetMapView(WNaviGuideActivity.this); } else if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_DENIED) { Toast.makeText(this, "需要开启相机使用权限", Toast.LENGTH_SHORT).show(); } } }
要实现普通导航与AR导航的切换,需要在onWalkNaviModeChange回调函数中调用mNaviHelper.switchWalkNaviMode方法。
示例代码如下:
mNaviHelper.setWalkNaviStatusListener(new IWNaviStatusListener() { /** * 普通步行导航模式和步行AR导航模式的切换 * @param i 导航模式 * @param walkNaviModeSwitchListener 步行导航模式切换的监听器 */ @Override public void onWalkNaviModeChange(int mode, WalkNaviModeSwitchListener walkNaviModeSwitchListener) { mNaviHelper.switchWalkNaviMode(WNaviGuideActivity.this, mode, walkNaviModeSwitchListener); } @Override public void onNaviExit() { } });
通过IWRouteGuidanceListener接口各种回调方法开发者可以对导航状态进行相应处理,主要包括导航开始、结束,导航过程中偏航、偏航结束,
诱导信息(诱导图标、诱导信息、诱导类型、剩余时间、剩余距离、震动等)
示例代码如下:
mNaviHelper.setRouteGuidanceListener(this, new IWRouteGuidanceListener() { //诱导图标更新 @Override public void onRouteGuideIconUpdate(Drawable drawable) { } //诱导类型枚举 @Override public void onRouteGuideKind(RouteGuideKind routeGuideKind) { } /** * 诱导信息 * @param charSequence 第一行显示的信息,如“沿当前道路” * @param charSequence1 第二行显示的信息,比如“向东出发”,第二行信息也可能为空 */ @Override public void onRoadGuideTextUpdate(CharSequence charSequence, CharSequence charSequence1) { } //总的剩余距离 @Override public void onRemainDistanceUpdate(CharSequence charSequence) { } //总的剩余时间 @Override public void onRemainTimeUpdate(CharSequence charSequence) { } //GPS状态发生变化,来自诱导引擎的消息 @Override public void onGpsStatusChange(CharSequence charSequence, Drawable drawable) { } //已经开始偏航 @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() { }
SDK只提供导航过程中的文本输出,不包含语音播报功能,需要自行传入对应的语音回调,形成播报功能。建议使用百度语音识别服务SDK。
下载地址: 百度语音识别服务
设置播报监听,使用语音回调播报。
示例代码如下:
mNaviHelper.setTTsPlayer(new IWTTSPlayer() { /** * 诱导文本回调 * @param s 诱导文本 * @param b 是否抢先播报 * @return */ @Override public int playTTSText(String s, boolean b) { return 0; } });