最近发现以前开发的一款集成了百度地图导航功能的APP在某些品牌手机上如华为、魅族等出现无法起调导航功能的问题,在查阅了大量官网和其它论坛的一些资料和博客后,分析并总结出了可以解决该问题的方法。
先来看下原先起调导航的实现方法:
/*** 开始导航* * @param view*/
public void startNavi() {//起点经纬坐标LatLng pt1 = new LatLng(mStart_Lat1, mStart_Lon1);//终点经纬坐标// 构建 导航参数NaviParaOption para = new NaviParaOption();para.startPoint(pt1);para.startName("从这里开始");para.endPoint(pt2); para.endName ("到这里结束");try {Log.e(TAG, "call navi");boolean opennavi =  BaiduMapNavigation.openBaiduMapNavi(para, this);Log.e(TAG, "opennavi="+opennavi);  if(!opennavi){Log.e(TAG, "call baidumap navi failed");}} catch (BaiduMapAppNotSupportNaviException e) {e.printStackTrace();AlertDialog.Builder builder = new AlertDialog.Builder(this);builder.setMessage("您尚未安装百度地图app或app版本过低,点击确认安装?");builder.setTitle("提示");builder.create().show();}}
上述方法是直接使用百度地图SDK提供的BaiduMapNavigation.openBaiduMapNavi接口进行起调导航,我在使用华为荣耀7或魅族pro6等手机进行测试时,当百度地图app在后台运行时,是可以调起导航界面的,但是当关闭百度地图应用程序后,则无法调起导航。之后通过分析和总结,归纳出了以下方面可以解决该问题。
先来看下改进后的方法代码:
/*** 开始导航* * @param view*/
public void startNavi() {//起点经纬坐标LatLng pt1 = new LatLng(mStart_Lat1, mStart_Lon1);//终点经纬坐标LatLng pt2 = new LatLng(mEndLat2, mEndLon2);// 构建 导航参数NaviParaOption para = new NaviParaOption();para.startPoint(pt1);para.startName("从这里开始");para.endPoint(pt2); para.endName ("到这里结束");if(isAvilible(getApplicationContext(), "com.baidu.BaiduMap")){try {Intent intent;try {intent = Intent.getIntent("intent://map/direction?origin=latlng:"+mStart_Lat1+","+mStart_Lon1+"|name:从这里开始&destination="+"latlng:"+mEndLat2+","+ mEndLon2+"|name:到这里结束"+"&mode=driving®ion=南京&referer=Autohome|GasStation#Intent;scheme=bdapp;package=com.baidu.BaiduMap;end");startActivity(intent); //启动调用} catch (URISyntaxException e) {// TODO Auto-generated catch blocke.printStackTrace();}} catch (Exception e) {e.printStackTrace();AlertDialog.Builder builder = new AlertDialog.Builder(this);builder.setMessage("您尚未安装百度地图app或app版本过低,点击确认安装?");builder.setTitle("提示");builder.create().show();}}else{//网页应用调起导航BaiduMapNavigation.openWebBaiduMapNavi(para, this);}}
/*** @function:判断手机是否安装了某应用* @param context* @param packageName* @return*/
private boolean isAvilible(Context context, String packageName){ final PackageManager packageManager = context.getPackageManager();//获取packagemanager List< PackageInfo> pinfo = packageManager.getInstalledPackages(0);//获取所有已安装程序的包信息 List<String> pName = new ArrayList<String>();//用于存储所有已安装程序的包名 //从pinfo中将包名字逐一取出,压入pName list中 if(pinfo != null){ for(int i = 0; i < pinfo.size(); i++){ String pn = pinfo.get(i).packageName; pName.add(pn); } } return pName.contains(packageName);//判断pName中是否有目标程序的包名,有TRUE,没有FALSE } 

上述代码中isAvilible(Context context, String packageName)方法是用来判断手机是否安装了百度地图应用的,若未安装,则使用网页应用调起导航,通过 BaiduMapNavigation.openWebBaiduMapNavi(NaviParaOption nav, Context context)方法实现;已安装百度地图,则使用百度地图导航的协议规范(参考链接),获得Intent对象,然后通过startActivity(intent),即可调起百度地图导航界面。
至此该问题算是得以解决啦,祝大家工作、生活开心快乐!

Android百度地图导航出现无法起调问题的解决方法相关推荐

  1. Android 百度地图导航引擎初始化失败

    最近在弄百度地图,关于导航部分出现了引擎初始化失败的问题,而且是在确保key值正确的情况下,依旧初始化失败,在网上找了很多资料也没能解决,最后没办法,只保留一个areambi下的库文件,其他什么are ...

  2. Android百度地图导航引擎初始化失败问题解决

    在确认代码无误,assets目录两个jpg,与一个channel文件都在,添加的so文件也与百度开发文档一致后,仍然提示百度导航引擎初始化失败 最终将百度地图开发包下libs/armeabi下所有的s ...

  3. qaxwidget传递参数到html,记一次QT使用QAxWidget打开.html文件调用显示离线百度地图不能缩放,自定义图片不能显示解决方法...

    主要问题: 一开始用的是在线的,都没有什么问题,自定义图片均可以显示,可是后面试了一下离线百度地图,在qt中运行打开.html文件和在电脑上面直接双击打开此文件显示是有差别的,在qt生成的程序中,地图 ...

  4. vue开发 百度地图 加载大量点导致卡顿解决方法(vue+vue-baidu-map+mapv)

    造成卡顿原因 及解决方法(解释可能有误!!!) 自行通过F12进入调试窗口,可以发现点标注Marker会以div元素在dom树中渲染出来,需要占用的内存大,渲染慢且大规模的 DOM 操作(会造成重绘或 ...

  5. Android百度地图导航的那些坑

    首先要先在AndroidManifest.xml中注册导航服务 <service android:name="com.baidu.navi.location.f" andro ...

  6. Android百度地图、高德地图、腾讯地图导航路线规划问题

      Android百度地图.高德地图.腾讯地图导航路线规划 在最近的项目中,需求是用户选择某个地址需要进行导航时,弹出百度地图.高德地图和腾讯地图让用户选择.如果该用户手机中已安装对应的地图App,则 ...

  7. android百度地图API 骑行,步行导航的DEMO以及途径点问题

    android百度地图API的简单骑行,步行的导航demo,以及关于多个路径点问题的说明 ##注:目前基础百度地图API的步行以及骑行是不支持多个路径点的,只能单点对单点的,如果你真的想多个途径点导航 ...

  8. Android百度地图,绘制,覆盖物,导航,定位,细腻分解!

    分享SDK:sharesdk 后端SDK:Bmob 推送SDK:极光推送 短信SDK:验证码实现 一.百度API 百度地图API:http://developer.baidu.com/map/ 二.搭 ...

  9. Android百度地图(六)自定义导航路线规划

    Android百度地图(六)自定义导航路线规划 兴奋加激动... 本文代码在http://blog.csdn.net/xyzz609/article/details/51959767的基础上进一步修改 ...

  10. 关于Android百度地图API步骑行导航引擎初始化失败以及View空指针异常的问题

    关于百度地图导航初始化失败问题以及View 空指针异常 因为要做毕业设计的关系所以用到了百度地图,但发现百度地图API这个是真的大坑一个,一些莫名其妙的BUG,搞得让你头大, 这里我先将初始化失败的问 ...

最新文章

  1. 编程基础 垃圾回收_为什么我回收编程问题
  2. 阿里JAVA 开发手册----整理
  3. SpringBoot中使用log4j进行日志管理
  4. Android 5.1 Settings源码简要分析
  5. matlab做pca人脸识别,[转载]一个修改后的PCA进行人脸识别的Matlab代码,识
  6. 【SpringBoot】【Thyemeleaf 】【Spring EL表达式】 SPEL调用静态类、静态方法
  7. 二值化图像去除小黑点_python与图像工程(2020.10.11)
  8. 前台传String日期格式后台用Date类型接收
  9. java 使用接口便于维护程序_Java初学——面向对象接口的应用
  10. [芯片] 2、接口技术·实验二·定时/计数器8253
  11. 神的战争god无法显示服务器,神的战争god快速升级抢资源攻略
  12. ES6新特性总结 一
  13. 单循环比赛算法设计c语言,单循环赛中选手胜负序列求解问题-数据结构与算法课程设计报告.doc...
  14. 拉普拉斯变换 性质 及常用函数变换
  15. 利用C语言实现wol网络远程唤醒
  16. Python练习task2:条件与循环
  17. WPS表格取消隐藏行不管用?
  18. 企业做短视频常见的3问题:太真实了
  19. 10个顶级商业思维:如何升级思维模式突破认知,让自己快速成长
  20. 经典c语言程序创意,49个经典年会小游戏(绝对有创意)C

热门文章

  1. Fatal signal 11 (SIGSEGV) at 0x00000004 (code=1), thread 261 (servicemanager)错误
  2. 关于flash分区打印信息jffs2: jffs2_scan_eraseblock(): Magic bitmask 0x1985
  3. js判断是否微信登陆
  4. 计算机网络中表征数据传输有效性的指标是,表征数据传输有效性的指标是
  5. IP地址-子网掩码-默认网关之间的关系
  6. TO B的百度云新品问世/价格腰斩 智能化DNA能撑起百度野心?
  7. 计算机无法识别点读笔,点读笔插电脑上不识别
  8. DOS命令:diskpart
  9. 在水处理控制系统中正确运用信号隔离器
  10. 小班安全使用计算机教案,安全用电器幼儿园小班安全教案