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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Naide_S/article/details/82980890

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

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

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

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

高德api点击查看

高德api描述

腾讯api点击查看

腾讯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">

    <TextView
        android: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" />
    <TextView
        android: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" />
    <TextView
        android: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" />
    <TextView
        android: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" />
    <TextView
        android: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文档 感兴趣朋友可以看一下

猜你喜欢

转载自blog.csdn.net/Naide_S/article/details/82980890