全部服务产品
开发者频道
定价
登录
室内步行导航
下载开发文档
室内导航简介

自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.** { *; }

上一篇

步行导航

下一篇

导航语音播报

本篇文章对您是否有帮助?