Ⅰ.前言

接到产品新需求,模仿高德地图APP通过搜索关键词,在地图标识附近区域内 "关键词"所搜到的点,地图和列表之间有抽屉似的效果,具体的看下面效果图。而打开第三方地图APP进行导航,也是产品要求的一个小功能,写完~记录下

效果图:

Ⅱ.实现

参考官方文档

  • 百度: http://lbsyun.baidu.com/index.php?title=uri/api/android
  • 高德: https://lbs.amap.com/api/amap-mobile/guide/android/route
  • 腾讯: https://lbs.qq.com/uri_v1/guide-mobile-navAndRoute.html

判断本地是否安装第三方App

通过以下函数

fun isInstallByread(String packageName): Boolean {return File("/data/data/${packageName}").exists();}

应用包名:

  • 百度:com.baidu.BaiduMap
  • 高德:com.autonavi.minimap
  • 腾讯:com.tencent.map

实现 :

 /**调起第三方地图APP导航*/fun openMapToDaoHan(packageName: String, toLatLng: LatLng, context: Context?){var showToastTxt: String = ""try {when (packageName) {OpenMapAppDialog.PACKAGE_NAME_BAIDU -> {showToastTxt = "手机未安装百度地图APP"val intent = Intent()//导航界面intent.setData(Uri.parse("baidumap://map/direction?destination=latlng:${toLatLng.latitude},${toLatLng.longitude}|name:目的地&coord_type=bd09ll&mode=driving"))//由于没获取到目的地地址,所以跳到目的地界面//intent.setData(Uri.parse("baidumap://map/geocoder?location=${item?.la},${item?.lg}&src=andr.baidu.openAPIdemo"))context?.startActivity(intent)}OpenMapAppDialog.PACKAGE_NAME_GAODE -> {showToastTxt = "手机未安装高德地图APP"val intent = Intent()intent.setPackage("com.autonavi.minimap")intent.setAction(Intent.ACTION_VIEW)intent.addCategory(Intent.CATEGORY_DEFAULT)val destination = convertBaiduToGPS(toLatLng);//转换坐标系intent.setData(Uri.parse("androidamap://route?sourceApplication=${GlobalUtils.getString(R.string.app_name)}&" +"dlat=" + destination.latitude + "&dlon=" + destination.longitude + "&dname=目的地" + "&dev=0&t=0"))context?.startActivity(intent)}OpenMapAppDialog.PACKAGE_NAME_TENGXUN -> {showToastTxt = "手机未安装腾讯地图APP"val intent = Intent()val destination = convertBaiduToGPS(toLatLng)intent.setData(Uri.parse("qqmap://map/routeplan?type=walk&to=目的地&tocoord=${destination.latitude},${destination.longitude}&policy=1&referer=myapp"))context?.startActivity(intent)}}}catch(ex: ActivityNotFoundException){Global.showToast(showToastTxt)}}/**百度坐标系 (BD-09) 转 火星坐标系(GCJ-02)的转换*/fun convertBaiduToGPS(latlng: LatLng) = CoordinateConverter().from(CoordinateConverter.CoordType.BD09LL).coord(latlng).convert()

在小米手机使用上面的 “判断本地是否安装第三方App” 的函数进行判断,当重新安装百度地图APP后,发现该函数返回false,所以改用try/catch的方式进行捕捉并判断.

高德地图、腾讯地图的经纬度坐标类型都是GCJ02,百度的经纬度坐标类型则是BD09,由于上面函数中传入的坐标是来源于百度SDK定位的,所以需要进行转换,才能用于高德和腾讯的导航.

参考官方链接:http://lbsyun.baidu.com/index.php?title=androidsdk/guide/tool/coordinate

Android 打开第三方地图App进行导航相关推荐

  1. IOS实现应用内打开第三方地图app进行导航

    用过微信的应该都知道这个功能,对方发一个位置给你,点进去地图展示对方跟你的当前位置,界面提供了选择各个地图应用进行导航,更好这次需求也要搞这个功能. 这个功能实现不难,个人感觉比应用内嵌入第三方地图导 ...

  2. iOS应用根据经纬度打开不同地图app进行导航

    现在地图导航已经很普遍了,为自己的项目添加导航功能有两种方法,一种是集成第三方sdk到自己的app上,这个比较复杂,并且会使自己的app变得很大很臃肿.所以,还是选择另一种方式,根据所获取的经纬度,打 ...

  3. 打开第三方地图App

    第一步:判断是否安装地图APP public static String PACKAGENAME_BD = "com.baidu.BaiduMap";//百度地图包名public ...

  4. uni-app打开第三方地图软件进行导航

    最近在开发字节小程序的过程中遇到地图导航的需求,相信大家也会遇到所以我为大家整理了一篇干货内容. 下面是我整理的代码案例---------记得喝水(太"干"了,复制就能用). 效果 ...

  5. Android调用高德地图app语音导航

    直接调用高德地图app进行导航 首先,要先进入高德开放平台,注册登录以后,创建自己的APP,然后会生成appkey 高德开放平台网址: http://lbs.amap.com/ 然后下载jar包导入项 ...

  6. Android app唤醒第三方地图App进行导航(高德,百度,腾讯)

    根据项目需要 要添加导航功能 由于我的app 的内部已经做了地图和路线规划 同时为了使用用户的使用习惯 我选择了第三方导航 选择用户已有地图软件进行路线规划和导航 我选择的是目前的主流地图app平台 ...

  7. Android打开第三方地图使用方法

    1.检测本机是否已安装第三方地图软件 //检测是否安装有第三方地图软件 //传入包名:如高德地图是 com.autonavi.minimap private boolean isInstallByre ...

  8. IOS 应用内打开三方地图app直接导航(高德坐标)

    疯狂试探 - (BOOL)canOpenURL:(NSURL *)url NS_AVAILABLE_IOS(3_0); 常用地图应用的url Scheme: //百度地图 baidumap //高德地 ...

  9. JS跳转到第三方地图APP

    最近的一个项目需求中需要让我们的手机网页跳到第三方地图APP进行导航,开发完之后进行一下整理归纳.整理思路是根据不同地图APP来进行.并分为IOS端和Android端. 地图跳转的核心思路是通过URL ...

最新文章

  1. “端午节” 送亲戚,送长辈,粽子可视化大屏来帮忙!
  2. 消控中心人员配置_建筑能耗监测系统集中化运行管理模式和人员配置!
  3. html range关联文本框,HTML5gt;meter标签与input(type=range)标签结合制作简易范围指示器...
  4. [BSidesSF2019]slashslash
  5. 关于fseek不能定位大于2G文件的问题
  6. FD_ISSET read 后程序被阻塞【原创】
  7. 让Salesforce用户管理变得更加容易的几种最佳实践
  8. gifrecord可以卸载吗_频繁的安装和卸载app会不会伤害苹果手机?
  9. Python标准库 urllib
  10. php常用字符串函数有哪些,ThinkPHP字符串函数及常用函数汇总
  11. 【批量查询IP归属】
  12. SCM系统是什么?供应链管理系统有哪些优势?
  13. esp32在ubuntu搭建环境,clone esp-idf部分库clone失败
  14. ACM学习历程—HDU 5025 Saving Tang Monk(广州赛区网赛)(bfs)
  15. 安卓动画入门教程 Animation in Android(1)
  16. 鄱.阳.湖.7月13日遥感数据汇总及共享
  17. Debian11安装MySql8
  18. Vuex、axios以及跨域请求处理
  19. kaggle员工离职预测——SVC
  20. 牛客-郊区春游(状态压缩dp)(java)(c++)

热门文章

  1. STM32硬件SPI通过fm17550读取身份证UID,识别银行卡,识别TYPEA与TYPEB
  2. 【数字IC/FPGA】门控时钟
  3. 郭博分析modbus主机模式
  4. 两个路由器如何构建局域网
  5. 三个基本的布尔逻辑算符是_什么是布尔逻辑运算符?布尔逻辑运算符一共有哪几种?...
  6. 生成PDF文件方案--学习中
  7. 16 服务器无响应什么意思,dns电脑服务器未响应是什么意思如何处理
  8. cisp题库700道(带答案)
  9. 如何从视频中分离音频/提取音频/提取视频
  10. tensorflow 语义slam_研究《视觉SLAM十四讲从理论到实践第2版》PDF代码+《OpenCV+TensorFlow深度学习与计算机视觉实战》PDF代码笔记...