更新时间:2020-06-23
室内导航简介
自V5.3.0起,新增室内步行导航功能。
下载开发包并配置开发环境
注意:
1. 步骑行导航的开发包与普通地图服务的开发包下载时区别。
2. 将解压后的开发包中assets目录下的png文件拷贝到您的项目的assets目录下。
配置AndroidManifest.xml文件
加入如下权限使用声明
<!-- 获取访问手机振动器权限,用于导航过程中的震动提示 --> <uses-permission android:name="android.permission.VIBRATE"/> <!-- 获取摄像头权限,用于AR步行导航 --> <uses-permission android:name="android.permission.CAMERA" /> <!-- 获取允许应用程序更改Wi-Fi连接状态的权限,用于室内步行导航wifi定位 --> <uses-permission android:name="android.Manifest.permission.CHANGE_WIFI_STATE"/> <!-- 获取设备Wi-Fi状态的权限,用于室内步行导航wifi定位 --> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
引擎初始化
使用室内步行导航前需要对步行导航引擎初始化。 示例代码如下:
// 获取导航控制类 // 引擎初始化 WalkNavigateHelper.getInstance().initNaviEngine(this, new IWEngineInitListener() { @Override public void engineInitSuccess() { //引擎初始化成功的回调 routePlanWithRouteNode (); } @Override public void engineInitFail() { //引擎初始化失败的回调 } });
1构造WalkNaviLaunchParam
示例代码如下:
//起终点位置 startPt = new LatLng(40.056015,116.3078);// 百度大厦 WalkRouteNodeInfo walkStartNode = new WalkRouteNodeInfo(); walkStartNode.setKeyword("百度大厦"); walkStartNode.setLocation(startPt); walkStartNode.setType(RouteNodeType.KEYWORD); walkStartNode.setCitycode(131) endPt = new LatLng(40.035919,116.339863); WalkRouteNodeInfo walkEndNode = new WalkRouteNodeInfo(); walkEndNode.setLocation(endPt); walkEndNode.setType(RouteNodeType.KEYWORD); walkEndNode.setKeyword("麻辣诱惑(五彩城店) "); walkEndNode.setBuildingID("1260176407175102463"); walkEndNode.setFloorID("F4"); walkEndNode.setCitycode(131); walkParam = new WalkNaviLaunchParam().startNodeInfo(walkStartNode).endNodeInfo(walkEndNode); //发起路线规划 WalkNavigateHelper.getInstance().routePlanWithRouteNode(mParam, new IWRoutePlanListener() { @Override public void onRoutePlanStart() { //开始算路的回调 } @Override public void onRoutePlanSuccess() { //算路成功 naviCalcRoute(0); } @Override public void onRoutePlanFail(WalkRoutePlanError walkRoutePlanError) { //算路失败的回调 } }); //导航引擎算路 private void naviCalcRoute(int routeIndex) { WalkNavigateHelper.getInstance().naviCalcRoute(routeIndex, new IWNaviCalcRouteListener() { @Override public void onNaviCalcRouteSuccess() { Intent intent = new Intent(); intent.setClass(BNaviMainActivity.this, WNaviGuideActivity.class); startActivity(intent); } @Override public void onNaviCalcRouteFail(WalkRoutePlanError error) { Log.d(TAG, "WalkNavi naviCalcRoute fail"); } }); }
开始导航
1新建诱导Activity,创建诱导View,发起导航
示例代码如下:
//获取WalkNavigateHelper实例 mNaviHelper = WalkNavigateHelper.getInstance(); //获取诱导页面地图展示View View view = mNaviHelper.onCreate(WNaviGuideActivity.this); if (view != null) { setContentView(view); } mNaviHelper.startWalkNavi(WNaviGuideActivity.this);
2正确管理WalkNavigateHelper对象生命周期。
代码如下:
@Override protected void onResume() { super.onResume(); mNaviHelper.resume(); } @Override protected void onPause() { super.onPause(); mNaviHelper.pause(); } @Override protected void onDestroy() { super.onDestroy(); mNaviHelper.quit(); }
完成以上步骤,即可在您的应用中实现基本的室内步行导航功能。
导航状态信息
通过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。 地址: 百度语音识别服务
设置播报监听,使用语音回调播报。
注:该接口需要在startWikeNavi方法之前调用。
示例代码如下:
mNaviHelper.setTTsPlayer(new IWTTSPlayer() { /** * 诱导文本回调 * @param s 诱导文本 * @param b 是否抢先播报 * @return */ @Override public int playTTSText(String s, boolean b) { return 0; } });
混淆配置
-keep class com.baidu.** {*;} -keep class mapsdkvi.com.** {*;} -dontwarn com.baidu.** -keep class com.google.protobuf.micro.** { *; } -keep class com.baidu.entity.pb.** { *; }