自v4.4.0起,新增步行导航功能,支持普通步行导航、步行AR导航、偏航纠正等导航功能。
自v5.0.0起,支持全球200多个国家和地区的步行导航,无需单独申请即可直接使用。
自V7.5.4起,地图SDK升级步行导航AR功能,优化AR步行导航可视化效果。
注:步行导航AR模式不支持手机横屏,升级后的AR步行导航支持Android 5.0以上的机型。
加入如下权限使用声明
<!-- 这个权限用于访问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() {@Overridepublic void engineInitSuccess() {//引擎初始化成功的回调routeWalkPlanWithParam();}@Overridepublic void engineInitFail() {//引擎初始化失败的回调}});
示例代码如下:
//起终点位置startPt = new LatLng(40.047416,116.312143);endPt = new LatLng(40.048424, 116.313513);//构造WalkNaviLaunchParammWalkParam = new WalkNaviLaunchParam().startNodeInfo(startPt).endNodeInfo(endPt);
//发起算路WalkNavigateHelper.getInstance().routePlanWithRouteNode(mWalkParam, new IWRoutePlanListener() {@Overridepublic void onRoutePlanStart() {//开始算路的回调}@Overridepublic void onRoutePlanSuccess() {//算路成功//跳转至诱导页面Intent intent = new Intent(BNaviMainActivity.this, WNaviGuideActivity.class);startActivity(intent);}@Overridepublic void onRoutePlanFail(WalkRoutePlanError walkRoutePlanError) {//算路失败的回调}});
示例代码如下:
//获取WalkNavigateHelper实例mNaviHelper = WalkNavigateHelper.getInstance();//获取诱导页面地图展示ViewView view = mNaviHelper.onCreate(WNaviGuideActivity.this);if (view != null) {setContentView(view);}mNaviHelper.startWalkNavi(WNaviGuideActivity.this);
代码如下:
@Overrideprotected void onResume() {super.onResume();mNaviHelper.resume();}@Overrideprotected void onPause() {super.onPause();mNaviHelper.pause();}@Overrideprotected void onDestroy() {super.onDestroy();mNaviHelper.quit();}
完成以上步骤,即可在您的应用中实现基本的步行导航功能,效果如图:
使用AR步行导航,需要在AndroidManifest中配置Camera权限:
<uses-permission android:name="android.permission.CAMERA" />
使用AR步行导航,需要在步行诱导页面的Activity中添加Camera权限申请的回调函数
@Overridepublic 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 步行导航模式切换的监听器*/@Overridepublic void onWalkNaviModeChange(int mode, WalkNaviModeSwitchListener walkNaviModeSwitchListener) {mNaviHelper.switchWalkNaviMode(WNaviGuideActivity.this, mode, walkNaviModeSwitchListener);}@Overridepublic void onNaviExit() {}});
效果如图:
通过IWRouteGuidanceListener接口各种回调方法开发者可以对导航状态进行相应处理,主要包括导航开始、结束,导航过程中偏航、偏航结束, 诱导信息(诱导图标、诱导信息、诱导类型、剩余时间、剩余距离、震动等)
示例代码如下:
mNaviHelper.setRouteGuidanceListener(this, new IWRouteGuidanceListener() {//诱导图标更新@Overridepublic void onRouteGuideIconUpdate(Drawable drawable) {}//诱导类型枚举@Overridepublic void onRouteGuideKind(RouteGuideKind routeGuideKind) {}/*** 诱导信息* @param charSequence 第一行显示的信息,如“沿当前道路”* @param charSequence1 第二行显示的信息,比如“向东出发”,第二行信息也可能为空*/@Overridepublic void onRoadGuideTextUpdate(CharSequence charSequence, CharSequence charSequence1) {}//总的剩余距离@Overridepublic void onRemainDistanceUpdate(CharSequence charSequence) {}//总的剩余时间@Overridepublic void onRemainTimeUpdate(CharSequence charSequence) {}//GPS状态发生变化,来自诱导引擎的消息@Overridepublic void onGpsStatusChange(CharSequence charSequence, Drawable drawable) {}//已经开始偏航@Overridepublic void onRouteFarAway(CharSequence charSequence, Drawable drawable) {}//偏航规划中@Overridepublic void onRoutePlanYawing(CharSequence charSequence, Drawable drawable) {}//重新算路成功@Overridepublic void onReRouteComplete() {}//抵达目的地@Overridepublic void onArriveDest() {}//震动@Overridepublic void onVibrate() {}
上一篇
下一篇
本篇文章对您是否有帮助?