浏览器版本低!无法浏览完整内容,建议升级或更换浏览器。

Android 地图SDK

百度地图SDK是一套应用程序接口, 通过调用地图SDK接口,开发者可以轻松访问百度地图的服务和数据,构建功能丰富、交互性强的地图类应用程序。

步行导航简介

v4.4.0 新增步行导航功能,支持普通步行导航、步行AR导航、偏航纠正等导航功能。

下载开发包

步行导航和骑行导航 均位于 骑行导航(bikenavi)组件内,请开发者注意选择为支持步行导航功能,选择基础地图组件时,需要使用map for bikenavi的版本。
如使用一体化下载平台http://lbsyun.baidu.com/sdk/download,单独选择【骑行导航(含基础地图)】下载即可,将自动为您下载对应全部组件包含map for bikenavi。

新增配置和Camera权限

AndroidManifest配置:

使用AR步行导航,需要在AndroidManifest中配置Camera权限:<uses-permission android:name="android.permission.CAMERA" />

AR步行导航Camera权限申请:

使用AR步行导航,需要在WNaviGuideActivity中添加Camera权限申请回调函数,并在回调函数中调用mNaviHelper.startCameraAndSetMapView(WNaviGuideActivity.this);

具体代码如下:

@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_DENIED) {
	           Toast.makeText(WNaviGuideActivity.this, "没有相机权限,请打开后重试", Toast.LENGTH_SHORT).show();
               } 
           else if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    mNaviHelper.startCameraAndSetMapView(WNaviGuideActivity.this);
                    }
               }
       }	    
步行导航模式

自v4.4.0起,新增普通步行导航和步行AR步行导航。默认启动时,使用普通步行导航。

发起步行导航逻辑如下:

<div class="bluetitle"><div class="services-title-text">导航参数设置</div></div>
LatLng  startPt = new LatLng(40.047416,116.312143);
LatLng  endPt = new LatLng(40.048424, 116.313513);
WalkNaviLaunchParam param = new WalkNaviLaunchParam().stPt(startPt).endPt(endPt);
引擎初始化

使用骑行导航前,需要骑行引擎初始化。

使用方法如下:

// 获取导航控制类
mNaviHelper = WalkNavigateHelper.getInstance();
// 引擎初始化
mNaviHelper.initNaviEngine(this, new IWEngineInitListener() {
   @Override
    public void engineInitSuccess() {
        Log.d(LTAG, "引擎初始化成功");
        routePlanWithParam();
    }
 
    @Override
    public void engineInitFail() {
        Log.d(LTAG, "引擎初始化失败");
    }
});
发起算路

引擎初始化成功之后,发起导航算路。算路成功后,在回调函数中设置跳转至诱导页面。

使用方法如下:

/**
 /**
 * 开始算路
 */
private void routePlanWithParam() {
    mNaviHelper.routePlanWithParams(param, new IWRoutePlanListener() {
        @Override
        public void onRoutePlanStart() {
            Log.d(LTAG, "开始算路");
        }
 
        @Override
        public void onRoutePlanSuccess() {
            Log.d(LTAG, "算路成功,跳转至诱导页面");
            Intent intent = new Intent();
            intent.setClass(BNaviMainActivity.this, WNaviGuideActivity.class);
            startActivity(intent);
        }
 
        @Override
        public void onRoutePlanFail(WalkRoutePlanError error) {
            Log.d(LTAG, "算路失败");
        }
 
    });
}
导航诱导页面逻辑

创建导航页面

在导航页面WNaviGuideActivity.this的onCreate方法中,调用mNaviHelper.onCreate(WNaviGuideActivity.this)创建诱导View。

使用方法说明

// 获取诱导页面地图展示View
View view = mNaviHelper.onCreate(WNaviGuideActivity.this);
if (view != null) {
    setContentView(view);
}

设置导航状态监听

要实现普通导航与AR导航的切换,需要在onWalkNaviModeChange回调函数中调用mNaviHelper.switchWalkNaviMode(WNaviGuideActivity.this, mode, listener);

使用方法如下:

   mNaviHelper.setWalkNaviStatusListener(new IWNaviStatusListener() {
  	@Override
	public void onWalkNaviModeChange(int mode, WalkNaviModeSwitchListener listener) {
		Log.d(TAG, "onWalkNaviModeChange : " + mode);
                mNaviHelper.switchWalkNaviMode(WNaviGuideActivity.this, mode, listener);
        }

        @Override
        public void onNaviExit() {
                Log.d(TAG, "onNaviExit");
        }
   });

开始导航

// 开始导航
mNaviHelper.startWalkNavi(WNaviGuideActivity.this);

导航生命周期

在步行导航页面对应的acticity的生命周期方法中分别调用WalkNavigateHelper类中的对应生命周期方法。

使用说明如下:

    @Override
    protected void onDestroy() {
        super.onDestroy();
        mNaviHelper.quit();
    }


    @Override
    protected void onResume() {
        super.onResume();
        mNaviHelper.resume();
    }

    @Override
    protected void onPause() {
        super.onPause();
        mNaviHelper.pause();
    }

导航状态信息

主要包括导航开始、结束,导航过程中偏航、偏航结束、诱导信息(包含诱导默认图标、诱导类型、诱导信息、剩余距离、时间、振动回调等)。

关键代码如下:

mNaviHelper.setRouteGuidanceListener(this, new IWRouteGuidanceListener() {
            /** 
             * 诱导图标更新 
             * 
             * @param icon
             */
            @Override
            public void onRouteGuideIconUpdate(Drawable icon) {

            }

              /**
     	       * 诱导枚举信息
     	       *
     	       * @param routeGuideKind 诱导信息 see {@link RouteGuideKind}
     	       */
            @Override
            public void onRouteGuideKind(RouteGuideKind routeGuideKind) {
            }

          /**
           * 诱导信息
           *
           * @param charSequence 第一行显示的信息,比如“沿当前道路”
           * @param charSequence1 第二行显示的信息,比如“向东出发”,第二行信息也可能为空
           */
            @Override
            public void onRoadGuideTextUpdate(CharSequence charSequence, CharSequence charSequence1) {
            }
             /**
              * 总的剩余距离
              *
              * @param charSequence 已经带有单位
              */
            @Override
            public void onRemainDistanceUpdate(CharSequence charSequence) {
            }

             /**
               * 总的剩余时间
               *
               * @param charSequence 已经带有单位
               */
            @Override
            public void onRemainTimeUpdate(CharSequence charSequence) {
            }

          /**
           * GPS状态发生变化,来自诱导引擎的消息
           *
           * @param charSequence GPS信息
           * @param drawable
           */
            @Override
            public void onGpsStatusChange(CharSequence charSequence, Drawable drawable) {
            }

          /**
           * 已经开始偏航
           *
           * @param charSequence 偏航信息
           * @param drawable
           */
            @Override
            public void onRouteFarAway(CharSequence charSequence, Drawable drawable) {
            }

          /**
           * 偏航规划中
           *
           * @param charSequence 偏航规划中的信息
           * @param drawable
           */
            @Override
            public void onRoutePlanYawing(CharSequence charSequence, Drawable drawable) {
            }

          /**
           * 重新算路成功
           */
            @Override
            public void onReRouteComplete() {
            }

          /**
           * 到达目的地
           */
            @Override
            public void onArriveDest() {

            }

          /**
           * 震动
           */
            @Override
            public void onVibrate() {

            }
        });
    }
获取语音播报文本

此组件只提供导航过程中的文本输出,不包含语音播报功能,需要自行传入对应的语音回调,形成播报功能。建议使用百度语音识别服务SDK。下载地址:http://yuyin.baidu.com/asr/download

获取语音播报文本方法:

mNaviHelper.setTTsPlayer(new IWTTSPlayer() {
 
    /**
     * 诱导文本回调
     * @param s 诱导文本
     * @param b 是否抢先播报
     * @return
     */
    @Override
    public int playTTSText(String s, boolean b) {
        return 0;
    }
});