1. 准备工作: 在百度地图上下载依赖,配置key。
  2. 创建一个demo项目,可显示百度地图的
  3. 添加按钮,点击按钮,开始导航
  4. 发起算路我用的是routePlanWithRouteNode这个方法,官网中routePlanWithParams这个方法,我调着闪退,目前不清楚原因
  5. 这个版本的需要设置隐私政策 SDKInitializer.setAgreePrivacy(this,true);
     // 在使用 SDK 各组间之前初始化 context 信息,传入 ApplicationContextSDKInitializer.setAgreePrivacy(this,true);// 默认本地个性化地图初始化方法SDKInitializer.initialize(Utils.getContext());//自4.3.0起,百度地图SDK所有接口均支持百度坐标和国测局坐标,用此方法设置您使用的坐标类型.//包括BD09LL和GCJ02两种坐标,默认是BD09LL坐标。SDKInitializer.setCoordType(CoordType.BD09LL);
  1. 此时地图会显示比例尺,显示纯绿色 如果用了LocationClient,也给他设置一下
LocationClient.setAgreePrivacy(true);
  1. 在mainAcitivity中,添加如下代码
 private WalkNavigateHelper helper = null;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);initPermissions();  // 初始化权限setContentView(R.layout.activity_main); // 填充视图initView();  // 初始化地图// 点击按钮开始导航ImageButton imageButton = findViewById(R.id.nav_btn);imageButton.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {// 初始化步行导航  startBikeNavi();}});}// 初始化权限private void initPermissions() {if (Build.VERSION.SDK_INT >= 23) {ArrayList<String> permissionsList = new ArrayList<>();String[] permissions = {Manifest.permission.ACCESS_NETWORK_STATE,Manifest.permission.INTERNET,Manifest.permission.ACCESS_COARSE_LOCATION,Manifest.permission.ACCESS_FINE_LOCATION,Manifest.permission.WRITE_EXTERNAL_STORAGE,};for (String perm : permissions) {if (PackageManager.PERMISSION_GRANTED != checkSelfPermission(perm)) {permissionsList.add(perm);// 进入到这里代表没有权限.}if (!permissionsList.isEmpty()) {String[] strings = new String[permissionsList.size()];requestPermissions(permissionsList.toArray(strings), 0);}}}}/*** @Description: 引擎初始化* @Author: LY*/private void startBikeNavi() {Log.d("=========", "startBikeNavi");try {helper = WalkNavigateHelper.getInstance();helper.initNaviEngine(this, new IWEngineInitListener() {@Overridepublic void engineInitSuccess() {Log.d("=========", "BikeNavi engineInitSuccess引擎初始化成功");startWebNavi();}@Overridepublic void engineInitFail() {Log.d("=========", "BikeNavi engineInitFail");BikeNavigateHelper.getInstance().unInitNaviEngine();}});} catch (Exception e) {Log.d("=========", "startBikeNavi Exception");e.printStackTrace();}}/*** @Description: 启动百度地图导航(Web)* @Author: LY*/private void startWebNavi() {//起终点位置LatLng walkStartNode = new LatLng(40.047416, 116.312143);LatLng walkEndNode = new LatLng(40.048424, 116.313513);WalkRouteNodeInfo startNode = new WalkRouteNodeInfo();startNode.setLocation(walkStartNode);WalkRouteNodeInfo endNode = new WalkRouteNodeInfo();endNode.setLocation(walkEndNode);// 官网//构造WalkNaviLaunchParamWalkNaviLaunchParam walkParam = new    WalkNaviLaunchParam().startNodeInfo(startNode).endNodeInfo(endNode);//获取WalkNavigateHelper实例 //发起算路helper.routePlanWithRouteNode(walkParam, new IWRoutePlanListener() {@Overridepublic void onRoutePlanStart() {Log.d("=======", "WalkNavi onRoutePlanStart开始步行导航");}@Overridepublic void onRoutePlanSuccess() {Log.d("========", "onRoutePlanSuccess算路成功");Intent intent = new Intent();intent.setClass(getContext(), WNaviGuideActivity.class);startActivity(intent);}@Overridepublic void onRoutePlanFail(WalkRoutePlanError error) {Log.d("Walk", "WalkNavi onRoutePlanFail");}});      }
  1. 创建WNaviGuideActivity类,改包名,无脑粘
package com.example.locationapp;import android.app.Activity;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.View;
import android.widget.Toast;import androidx.annotation.NonNull;import com.baidu.mapapi.walknavi.WalkNavigateHelper;
import com.baidu.mapapi.walknavi.adapter.IWNaviStatusListener;
import com.baidu.mapapi.walknavi.adapter.IWRouteGuidanceListener;
import com.baidu.mapapi.walknavi.adapter.IWTTSPlayer;
import com.baidu.mapapi.walknavi.model.RouteGuideKind;
import com.baidu.platform.comapi.walknavi.WalkNaviModeSwitchListener;
import com.baidu.platform.comapi.walknavi.widget.ArCameraView;public class WNaviGuideActivity extends Activity {private final static String TAG = WNaviGuideActivity.class.getSimpleName();private WalkNavigateHelper mNaviHelper;private boolean isPreSPEAKtotal = true;private String orient = "";@Overrideprotected void onDestroy() {super.onDestroy();mNaviHelper.quit();}@Overrideprotected void onResume() {super.onResume();mNaviHelper.resume();}@Overrideprotected void onPause() {super.onPause();mNaviHelper.pause();}Handler handler = new Handler() {@Overridepublic void handleMessage(Message msg) {super.handleMessage(msg);if (msg.what == 0x001) {ChangeState();handler.sendEmptyMessageDelayed(0x001, 45000);}if (msg.what == 0x002) {handler.sendEmptyMessageDelayed(0x002, 30000);}if (msg.what == 0x003) {startActivity(new Intent(WNaviGuideActivity.this, MainActivity.class));}}};private void ChangeState() {isPreSPEAKtotal = true;}@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);mNaviHelper = WalkNavigateHelper.getInstance();try {View view = mNaviHelper.onCreate(WNaviGuideActivity.this);if (view != null) {setContentView(view);}} catch (Exception e) {e.printStackTrace();}//设置步行导航状态监听mNaviHelper.setWalkNaviStatusListener(new IWNaviStatusListener() {@Overridepublic void onWalkNaviModeChange(int mode, WalkNaviModeSwitchListener listener) {Log.d("======", "onWalkNaviModeChange : " + mode);mNaviHelper.switchWalkNaviMode(WNaviGuideActivity.this, mode, listener);}/* @Description: 这个是在退出导航时自动调用的方法,在这里要把对象进行释放,避免空对象的产生* @Author: LiY                                                                                                                                                                         ue*/@Overridepublic void onNaviExit() {Log.d("======", "onNaviExit");handler.removeMessages(0x001);handler.removeMessages(0x002);handler.removeMessages(0x003);}});/*** 诱导文本回调* @param s 诱导文本* @param b 是否抢先播报* @return*/mNaviHelper.setTTsPlayer(new IWTTSPlayer() {@Overridepublic int playTTSText(final String s, boolean b) {Log.d(TAG, "tts: " + s);return 0;}});boolean startResult = mNaviHelper.startWalkNavi(WNaviGuideActivity.this);Log.e(TAG, "startWalkNavi result : " + startResult);//设置路线指引监听mNaviHelper.setRouteGuidanceListener(this, newIWRouteGuidanceListener() {/*** @Description: 诱导图标更改方法回调* @Author: LY*/@Overridepublic void onRouteGuideIconUpdate(Drawable icon) {}@Overridepublic void onRouteGuideKind(RouteGuideKind routeGuideKind) {Log.d("======", "onRouteGuideKind: " + routeGuideKind);if (routeGuideKind == RouteGuideKind.NE_Maneuver_Kind_PassRoad_Left || routeGuideKind == RouteGuideKind.NE_Maneuver_Kind_PassRoad_Right || routeGuideKind == RouteGuideKind.NE_Maneuver_Kind_Right_PassRoad_Front || routeGuideKind == RouteGuideKind.NE_Maneuver_Kind_Right_PassRoad_UTurn)if (routeGuideKind == RouteGuideKind.NE_Maneuver_Kind_RightDiagonal_PassRoad_Front || routeGuideKind == RouteGuideKind.NE_Maneuver_Kind_RightDiagonal_PassRoad_Left || routeGuideKind == RouteGuideKind.NE_Maneuver_Kind_RightDiagonal_PassRoad_Left_Front || routeGuideKind == RouteGuideKind.NE_Maneuver_Kind_RightDiagonal_PassRoad_Right || routeGuideKind == RouteGuideKind.NE_Maneuver_Kind_RightDiagonal_PassRoad_Right_Back || routeGuideKind == RouteGuideKind.NE_Maneuver_Kind_RightDiagonal_PassRoad_Right_Front){Log.d("========", "onRouteGuideKind: aaaaaa");}}/*** @Description: 诱导信息*/@Overridepublic void onRoadGuideTextUpdate(CharSequence charSequence, CharSequencecharSequence1) {Log.d(TAG, "onRoadGuideTextUpdate   charSequence=: " + charSequence + "   charSequence1 = : " +charSequence1);orient = charSequence.toString() + charSequence1.toString();}/**** @Description: 总剩余距离回调*/@Overridepublic void onRemainDistanceUpdate(CharSequence charSequence) {Log.d(TAG, "onRemainDistanceUpdate: charSequence = :" + charSequence);if (isPreSPEAKtotal) {}}/**** @Description: 总剩余时间回调* @Author: LY*/@Overridepublic void onRemainTimeUpdate(CharSequence charSequence) {Log.d(TAG, "onRemainTimeUpdate: charSequence = :" + charSequence);if (isPreSPEAKtotal) {isPreSPEAKtotal = false;}}@Overridepublic void onGpsStatusChange(CharSequence charSequence, Drawable drawable) {Log.d(TAG, "onGpsStatusChange: charSequence = :" + charSequence);}@Overridepublic void onRouteFarAway(CharSequence charSequence, Drawable drawable) {Log.d(TAG, "onRouteFarAway: charSequence = :" + charSequence);}/*** @Description: 偏航规划中*/@Overridepublic void onRoutePlanYawing(CharSequence charSequence, Drawable drawable) {Log.d(TAG, "onRoutePlanYawing: charSequence = :" + charSequence);}/**** @Description: 重新算路成功*/@Overridepublic void onReRouteComplete() {}/**** @Description: 到达目的地回调*/@Overridepublic void onArriveDest() {handler.sendEmptyMessageDelayed(0x003, 6000);}@Overridepublic void onIndoorEnd(Message msg) {}@Overridepublic void onFinalEnd(Message msg) {}@Overridepublic void onVibrate() {}});handler.sendEmptyMessage(0x001);handler.sendEmptyMessage(0x002);}@Overridepublic void onRequestPermissionsResult(int requestCode, @NonNull 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);}}}
}
  1. 在AndroidManifest中声明WNaviGuideActivity
<activity android:name=".WNaviGuideActivity"></activity>

android开发百度地图步行导航相关推荐

  1. Android开发——百度地图定位

    Android开发--百度地图定位 项目需求 项目内容 注册和获取秘钥 获取项目SHA1码 获取项目AK码 AS依赖配置 AS源码 AndroidManifest文件 布局文件 DemoApplica ...

  2. qt for android开发百度地图(一步步带图详解)

    qt for android开发百度地图 前言:qt for android开发百度地图,其实找了很多资料,基本上没有,就自己折磨弄了出来,这个过程还是很曲折的,折磨了一两个星期,没有资料,就两个字' ...

  3. android开发百度地图坐标偏差,利用百度地图Android sdk高仿微信发送位置功能及遇到的问题...

    接触了百度地图开发平台半个月了,这2天试着模仿了微信给好友发送位置功能,对百度地图的操作能力又上了一个台阶 我在实现这个功能的时候,遇到一些困难,可能也是别人将会遇到的困难,特在此列出 1.在微信发送 ...

  4. Android开发百度地图指南针消失问题

    发现最近接手的项目跟百度地图干上了,从2014年的V3.xx版本到现在的最新版,踩了不知道没踩过的多少坑.今天在维护一个2014年的老项目的时候,反馈有一条"指南针不显示,旋转后无法复位&q ...

  5. Android安卓百度地图定位+导航+路径规划实现APP(源码+APK) 毕业设计

    百度地图实时定位+导航路径规划的实现APP 本科生毕业设计:<一种智能停车系统的设计>,成都信息工程大学,2018 使用到的技术 百度地图SDK LBS云数据管理 路径规划与导航 二维码扫 ...

  6. android 开发百度地图问题集锦

    由于是第一次尝试使用百度地图的sdk的进行一个简单的定位,而遇到的问题,并说说本人理解到的原因和解决方法: 1.问题:从百度的开发平台注册和创建我们自己的应用后,再将百度sdk下载下来,并且集成到我们 ...

  7. android百度定位代码,android开发:百度地图及定位的演示代码

    //百度地图定位的代码,需要加载百度地图API的SDK LocationClient client = new LocationClient(mContext); LocationClientOpti ...

  8. android开发百度地图定位到几内亚湾问题的解决

    android开发一直定位的几内亚湾,这个问题我大概停在这里3,4天,看网上的各种回答试了很多都不行,头疼.偶然看到一位大佬写的具体定位代码的写法,解决了这个问题.原博客https://blog.cs ...

  9. android 开发 百度地图,百度地图android开发(转)

    摘要:用户使用地图的时候,希望不联网就能展示地图.这时,就需要使用到离线地图了.如何在百度地图SDK里引入离线地图呢? ---------------------------------------- ...

最新文章

  1. Vijos P1848 记数问题【进制】
  2. python工具之myql数据库操作
  3. 动能如何转化成力_带式污泥压滤机的压力如何为液体的流动提供动能?
  4. 【verilog语法】always@(*)自动添加敏感变量列表
  5. c语言数据结构将链串里所有值为x的字符删除_redis数据结构与对象到底长什么样?...
  6. 一键去除网页BOM属性【解决乱码,头部空白,#65279问题】
  7. EcmaScript对象克隆之谜
  8. Pytest fixture参数化params
  9. Linux学习资源汇总
  10. Python数据分析学习笔记04:Pandas基础
  11. 自学前端1年,靠着这份面试题和答案,我找到了20K工作
  12. #CSP 201912-1 报数(C语言)(100分)
  13. vs怎么生成html文件,vscode 快速生成html
  14. 【AtCoder】ARC100 题解
  15. python创建字典的两种方法
  16. WINDOWS对文件签名,算法如何由sha1改为sha256/sha512
  17. 40163 php,【PHP】微信支付JsApi 40163错误,_PHP_ 少侠科技
  18. 项目Beta冲刺(2/7)(追光的人)(2019.5.24)
  19. 程序员,被代码耽误的段子手!
  20. gets和fgets函数及其区别,C语言gets和fgets函数详解

热门文章

  1. 【NDN基础】Networking Named Content 问题汇总
  2. Java多线程之----CyclicBarrier
  3. 30 个纯 HTML5 实现的游戏
  4. 计算机网恢,电脑附身
  5. python绘制不同风格的分级统计图(Choropleth map)
  6. axios请求发送两次请求_vue使用axios发送请求,都会发送两次请求
  7. VirtualBox Guest Additions
  8. 小米路由器3无线网连接到服务器,192.168.31.1小米路由器手机登录设置方法
  9. Python -- Matplotlib:画一条水平线或竖直线
  10. 记一次git pull报错问题 is owned by: ‘xxx‘ but the current user is ‘xxx‘