根据项目需要 要添加导航功能 由于我的app 的内部已经做了地图和路线规划 同时为了使用用户的使用习惯 我选择了第三方导航 选择用户已有地图软件进行路线规划和导航
我选择的是目前的主流地图app平台 高德 百度 腾讯 三种导航软件 至于google 地图 由于某些原因 我放弃掉了

说一下我的思路
先检索手机是否安装了目标地图app(高德,百度,腾讯) 如果有安装其中之一 提示用户跳转打开地图 如果没有安装 提示安装

看一下实现吧 相对来说很简单 其他的就不多说了 直接上代码

好了 为了方便大家 我把三个app 的Android技术文档连接放在这里 供大家参考

高德api点击查看

腾讯api点击查看

百度api

看了这些 思路应该更加清楚了

下面是我编写的工具类

// 检索地图软件
public static boolean isAvilible(Context context, String packageName){
//获取packagemanager
final PackageManager packageManager = context.getPackageManager();
//获取所有已安装程序的包信息
List<PackageInfo> packageInfos = packageManager.getInstalledPackages(0);
//用于存储所有已安装程序的包名
List<String> packageNames = new ArrayList<String>();
//从pinfo中将包名字逐一取出,压入pName list中
if(packageInfos != null){
for(int i = 0; i < packageInfos.size(); i++){
String packName = packageInfos.get(i).packageName;
packageNames.add(packName);
}
}
//判断packageNames中是否有目标程序的包名,有TRUE,没有FALSE
return packageNames.contains(packageName);
}/**
* 指定地图
*百度地图包名:com.baidu.BaiduMap高德地图包名:com.autonavi.minimap腾讯地图包名:com.tencent.map谷歌地图 com.google.android.apps.maps**/
public List<String> mapsList (){List<String> maps = new ArrayList<>();maps.add("com.baidu.BaiduMap");maps.add("com.autonavi.minimap");maps.add("com.tencent.map");return maps;
}// 检索筛选后返回
public  List<String> hasMap (Context context){List<String> mapsList = mapsList();List<String> backList = new ArrayList<>();for (int i = 0; i < mapsList.size(); i++) {boolean avilible = isAvilible(context, mapsList.get(i));if (avilible){backList.add(mapsList.get(i));}}return backList;
}

选择窗口 并实现唤醒目标app进行导航

public class MapToast {
public void showChooseMap(Context context, View rootView,HisLocationBean bean){
CommonPopupWindow popupWindow=new CommonPopupWindow.Builder(context)
.setView(R.layout.map_toast)
.setWidthAndHeight(ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT)
.setBackGroundLevel(0.5f)
.setViewOnclickListener((view, layoutResId, popupWindow1) -> {
View map_toast_cancelbt = view.findViewById(R.id.map_toast_cancelbt);
View map_toast_gaodebt = view.findViewById(R.id.map_toast_gaodebt);
View map_toast_baidubt = view.findViewById(R.id.map_toast_baidubt);
View map_toast_tencentbt = view.findViewById(R.id.map_toast_tencentbt);
View map_toast_hinttv = view.findViewById(R.id.map_toast_hinttv);List<String> hasMap = new ThridMapUtil().hasMap(context);for (int i = 0; i < hasMap.size(); i++) {if (hasMap.get(i).contains("com.autonavi.minimap")){map_toast_gaodebt.setVisibility(View.VISIBLE);}else if (hasMap.get(i).contains("com.baidu.BaiduMap")){map_toast_baidubt.setVisibility(View.VISIBLE);}else if (hasMap.get(i).contains("com.tencent.map")){map_toast_tencentbt.setVisibility(View.VISIBLE);}}if (hasMap.size() == 0){map_toast_hinttv.setVisibility(View.VISIBLE);}map_toast_cancelbt.setOnClickListener(view1 -> {popupWindow1.dismiss();});map_toast_gaodebt.setOnClickListener(view1 -> {toGaodeNavi(context,bean);popupWindow1.dismiss();});map_toast_baidubt.setOnClickListener(view1 -> {toBaidu(context,bean);popupWindow1.dismiss();});map_toast_tencentbt.setOnClickListener(view1 -> {toTencent(context,bean);popupWindow1.dismiss();});}).setOutsideTouchable(true).create();popupWindow.showAtLocation(rootView, Gravity.BOTTOM,0,0);
}// 百度地图
public void toBaidu(Context context, HisLocationBean bean){Intent intent= new Intent("android.intent.action.VIEW", android.net.Uri.parse("baidumap://map/geocoder?location=" + bean.getLat() + "," + bean.getLon()));context.startActivity(naviIntent);
}
// 高德地图
public void toGaodeNavi(Context context,HisLocationBean bean){Intent intent= new Intent("android.intent.action.VIEW", android.net.Uri.parse("androidamap://route?sourceApplication=appName&slat=&slon=&sname=我的位置&dlat="+ bean.getLat() +"&dlon="+ bean.getLon()+"&dname=目的地&dev=0&t=2"));context.startActivity(naviIntent);
}
// 腾讯地图
public void toTencent(Context context,HisLocationBean bean){Intent intent = new Intent("android.intent.action.VIEW", android.net.Uri.parse("qqmap://map/routeplan?type=drive&from=&fromcoord=&to=目的地&tocoord=" + bean.getLat() + "," + bean.getLon() + "&policy=0&referer=appName"));context.startActivity(naviIntent);}
}

window的xml文件

<LinearLayout
android:background="@color/color_f6f7f8"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_20"
android:layout_marginLeft="@dimen/dp_20"
android:layout_marginRight="@dimen/dp_20"
android:layout_marginBottom="@dimen/dp_20"
android:orientation="vertical"
android:gravity="center_vertical"><TextViewandroid:background="@color/color_FFFFFF"android:layout_marginTop="@dimen/dp_15"android:layout_width="match_parent"android:layout_height="@dimen/dp_45"android:text="高德地图"android:visibility="gone"android:clickable="true"android:id="@+id/map_toast_gaodebt"android:textSize="@dimen/titlesise"android:textColor="@color/color_626262"android:gravity="center" /><TextViewandroid:background="@color/color_FFFFFF"android:layout_marginTop="@dimen/dp_1"android:layout_width="match_parent"android:layout_height="@dimen/dp_45"android:text="百度地图"android:visibility="gone"android:clickable="true"android:id="@+id/map_toast_baidubt"android:textSize="@dimen/titlesise"android:textColor="@color/color_626262"android:gravity="center" /><TextViewandroid:background="@color/color_FFFFFF"android:layout_marginTop="@dimen/dp_1"android:layout_width="match_parent"android:layout_height="@dimen/dp_45"android:text="腾讯地图"android:visibility="gone"android:clickable="true"android:id="@+id/map_toast_tencentbt"android:textSize="@dimen/titlesise"android:textColor="@color/color_626262"android:gravity="center" /><TextViewandroid:background="@color/color_FFFFFF"android:layout_marginTop="@dimen/dp_1"android:layout_width="match_parent"android:layout_height="@dimen/dp_45"android:text="无法检索地图软件,请安装地图软件后再试"android:visibility="gone"android:clickable="true"android:id="@+id/map_toast_hinttv"android:textSize="@dimen/titlesise"android:textColor="@color/color_626262"android:gravity="center" /><TextViewandroid:background="@color/color_FFFFFF"android:layout_marginTop="@dimen/dp_15"android:layout_width="match_parent"android:layout_height="@dimen/dp_40"android:text="返回"android:clickable="true"android:id="@+id/map_toast_cancelbt"android:textSize="@dimen/titlesise"android:textColor="@color/color_626262"android:gravity="center" />
</LinearLayout>

说在最后 文中提供了google 的包名 google地图api文档 感兴趣朋友可以看一下

Android app唤醒第三方地图App进行导航(高德,百度,腾讯)相关推荐

  1. android app调用第三方地图路线规划导航(百度,高德,腾讯)

    android app调用第三方地图路线规划导航(百度,高德,腾讯) 因为直接使用高德的sdk提供的导航被投诉说不准,所以需要接第三方. 把BAT系的地图都接上了,有兄弟找到其他的地图调用方法告诉下小 ...

  2. 基于android对接百度地图搜索附近关键字列表展示并调用第三方地图应用打开导航(百度地图、高德地图)

    经过两天的折腾,终于把需求实现了,记录下过程与遇到的坑(详情链接) 先上效果图 搜索结果 点击列表中的去这里调取第三方地图APP,效果图 首先配置百度地图 bBaiduMap = mMapView.g ...

  3. Android 打开第三方地图App进行导航

    Ⅰ.前言 接到产品新需求,模仿高德地图APP通过搜索关键词,在地图标识附近区域内 "关键词"所搜到的点,地图和列表之间有抽屉似的效果,具体的看下面效果图.而打开第三方地图APP进行 ...

  4. 调用第三方地图app导航(高德、百度、腾讯)

    当前位置导航到某个地方,还可以设置出发地的经纬度和位置信息,具体看各官网参数设置. 以下代码可以直接使用. /*** Date: 2022-11-23* Author: lanzi* 调用第三方地图a ...

  5. Android高效率编码-第三方SDK详解系列(一)——百度地图,绘制,覆盖物,导航,定位,细腻分解!...

    Android高效率编码-第三方SDK详解系列(一)--百度地图,绘制,覆盖物,导航,定位,细腻分解! 这是一个系列,但是我也不确定具体会更新多少期,最近很忙,主要还是效率的问题,所以一些有效的东西还 ...

  6. uniapp唤醒手机地图app

    H5唤醒手机app地图 // latitude longitude 要跳转地址的经纬度,name 要跳转地址的地名 uni.showActionSheet({title: '请选择系统中已安装的地图应 ...

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

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

  8. Android高效率编码-第三方SDK详解系列(一)——百度地图,绘制,覆盖物,导航,定位,细腻分解!

    Android高效率编码-第三方SDK详解系列(一)--百度地图,绘制,覆盖物,导航,定位,细腻分解! 这是一个系列,但是我也不确定具体会更新多少期,最近很忙,主要还是效率的问题,所以一些有效的东西还 ...

  9. 简单Android手机APP地图,android最简单手机地图APP(只需5分钟)

    android最简单手机地图APP--只有三部分. 第一部分 首先建立一个MapActivity在setContentView(R.layout.activity_map);中创建一个代码如下. [h ...

最新文章

  1. 大写的服!90 后程序员利用业余时间帮网友鉴定毒蘑菇,拥有百万粉丝成网络大 V...
  2. 13.Zookeeper的java客户端API使用方法
  3. 85. Leetcode 746. 使用最小花费爬楼梯 (动态规划-基础题)
  4. anaconda下tensorflow安装遇到的问题记录及解决办法
  5. 最大似然估计与损失函数
  6. Git笔记(17) 协议
  7. 【jvm】jvm 网络使用率 nicstat
  8. 闲 鱼,进阶技巧,如何提高你的曝光量?
  9. 主链 100 强榜单出炉, XRP 竟与比特币比肩; 以太坊每周产生 1248 种新代币 | 数据周榜...
  10. SQL Server DATEPART() 函数
  11. LINUX中nagios客户端安装步骤及遇到问题
  12. vue.js手册_Vue手册:Vue.js的完整介绍
  13. Redis底层数据结构——跳跃列表
  14. #读书笔记# 《人类简史》Chapter7
  15. webpack合成sprite图
  16. 银行项目外包专题系列之二:公司没提升打杂,裸辞后收到银行外包,到底去还是不去
  17. c语言二级培训申请书,学分申请书
  18. 优化距离计算函数的matlab实现
  19. 关于xshell突然就连不上虚拟机的解决方法(之前可以正常连接)
  20. allegro 中添加拖锡焊盘

热门文章

  1. makefile报错:warning: overriding recipe for target xxx
  2. matlab中如何提取负序,正负序提取方法与流程
  3. 全名k歌解析php,全民K歌详情解析API接口
  4. swf文件加密基础(转)
  5. RFID在我们日常生活上的应用
  6. jQuery AJAX 方法 success()后台传来的4种数据
  7. ArcGIS根据行政图校准延安市乡镇shp行政边界
  8. android 2.3.1,TIM for Windows/Android v2.3.1 正式版发布
  9. 那些设备才能组合成远程抄表系统
  10. 智能天线的原理学习与理解