android跳转第三方地图app 如果没有第三方app就跳转应用商店

第一步:

写一个判断是否安装某个app的方法

这里pkgName是你要查询的app的包名,如果不知道可以自行百度,这里我给出几个地图的app报名:

public static final String PN_GAODE_MAP = “com.autonavi.minimap”;// 高德地图包名
public static final String PN_BAIDU_MAP = “com.baidu.BaiduMap”; // 百度地图包名
public static final String PN_TENCENT_MAP = “com.tencent.map”; // 腾讯地图包名

 /**
     * 判断是否安装某个应用
     */
    private boolean checkAppInstalled(Context context, String pkgName) {
        if (pkgName== null || pkgName.isEmpty()) {
            return false;
        }
        final PackageManager packageManager = context.getPackageManager();
        List<PackageInfo> info = packageManager.getInstalledPackages(0);
        if(info == null || info.isEmpty()){
            return false;
        }
        for ( int i = 0; i < info.size(); i++ ) {
            if(pkgName.equals(info.get(i).packageName)) {
                return true;
            }
        }
        return false;
    }

第二步:

写好坐标转换的方法:
调用高德地图和腾讯地图需要传入GCJ02坐标系坐标,调用百度地图需要传入BD09坐标系坐标(如果你使用的是高德地图sdk,在调用百度地图时,传给百度地图的经纬度就需要由GCJ02转换为BD09,反过来一是一样)

 /**
     * 调用高德地图和腾讯地图需要传入GCJ02坐标系坐标,调用百度地图需要传入BD09坐标系坐标
     *
     * BD-09 坐标转换成 GCJ-02 坐标
     */
    public static LatLng BD2GCJ(LatLng gd) {
        double x = gd.longitude - 0.0065, y = gd.latitude - 0.006;
        double z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * Math.PI);
        double theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * Math.PI);

        double lng = z * Math.cos(theta);//lng
        double lat = z * Math.sin(theta);//lat
        return new LatLng(lat, lng);
    }

    /**
     * GCJ-02 坐标转换成 BD-09 坐标
     */
    public static LatLng GCJ2BD(LatLng gd) {
        double x = gd.longitude, y = gd.latitude;
        double z = Math.sqrt(x * x + y * y) + 0.00002 * Math.sin(y * Math.PI);
        double theta = Math.atan2(y, x) + 0.000003 * Math.cos(x * Math.PI);
        double tempLon = z * Math.cos(theta) + 0.0065;
        double tempLat = z * Math.sin(theta) + 0.006;
        return new LatLng(tempLat, tempLon);
    }

第三步:

当手机没有地图时去应用商店下载的方法:

**大佬原文链接:**https://blog.csdn.net/q4878802/article/details/51276642

 /**
     * 通过包名 在应用商店打开应用
     *
     * @param packageName 包名
     */
    private void openApplicationMarket(String packageName) {
        try {
            String str = "market://details?id=" + packageName;
            Intent localIntent = new Intent(Intent.ACTION_VIEW);
            localIntent.setData(Uri.parse(str));
            startActivity(localIntent);
        } catch (Exception e) {
            // 打开应用商店失败 可能是手机没有安装应用市场
            e.printStackTrace();
            Toast.makeText(getApplicationContext(), "打开应用商店失败", Toast.LENGTH_SHORT).show();
            // 调用系统浏览器进入商城
            String url = "http://app.mi.com/detail/163525?ref=search";
            openLinkBySystem(url);
        }
    }

    /**
     * 调用系统浏览器打开网页
     *
     * @param url 地址
     */
    private void openLinkBySystem(String url) {
        Intent intent = new Intent(Intent.ACTION_VIEW);
        intent.setData(Uri.parse(url));
        startActivity(intent);
    }

第四步:

开始调用方法来实现功能:

PS:这次的调用我只传入了 目的地 经纬度,出发地 地图会默认为定位的位置

大佬原文链接:https://blog.csdn.net/weimingjue/article/details/80493969

高德地图的调用(我本身用的高德地图sdk所以高德地图就不再转换坐标,你可以参照我在百度时的转换来做高德的转换):

                      //判断是否安装高德地图
                      //checkAppInstalled()是前面写的判断是否安装这个应用的方法
                      
                    if (checkAppInstalled(RoutePlanningActivity.this,"com.autonavi.minimap")){   
                        Toast.makeText(RoutePlanningActivity.this, "你安装了高德地图", Toast.LENGTH_SHORT).show();
                         
                        Uri uri = Uri.parse("amapuri://route/plan/?dlat="+endlatitude+"&dlon="+endlongititude+"&dname="+""+"&dev=0&t=0");
                        Intent intent=new Intent(Intent.ACTION_VIEW, uri );
                        startActivity(intent);
                    }else {
                       new AlertDialog.Builder(RoutePlanningActivity.this)
                                .setTitle("提示")
                                .setMessage("检测到您没有安装高德地图,是否去下载?")
                                .setPositiveButton("去下载", new DialogInterface.OnClickListener() {
                                    @Override
                                    public void onClick(DialogInterface dialog, int which) {
                                        openApplicationMarket("com.autonavi.minimap");
                                    }
                                })
                                .setNegativeButton("不了", new DialogInterface.OnClickListener() {
                                    @Override
                                    public void onClick(DialogInterface dialog, int which) {
                                        dialog.dismiss();
                                    }
                                }).create().show();
                    }

高德 Uri 可拼接的参数:
在这里插入图片描述
百度地图的调用:

                    //坐标转换
                    LatLng bdlatlng=GCJ2BD(new LatLng(endlatitude,endlongititude));
                    //判断是否安装百度地图
                    if (checkAppInstalled(RoutePlanningActivity.this,"com.baidu.BaiduMap")){
                        Toast.makeText(RoutePlanningActivity.this, "你安装了百度地图", Toast.LENGTH_SHORT).show();
   Uri uri = Uri.parse("baidumap://map/direction?destination=latlng:"+bdlatlng.latitude+","+ bdlatlng.longitude+"|name:"+""+"&mode=driving");
                        Intent intent=new Intent(Intent.ACTION_VIEW,uri);
                        startActivity(intent);
                    }else {
                        new AlertDialog.Builder(RoutePlanningActivity.this)
                                .setTitle("提示")
                                .setMessage("检测到您没有安装百度地图,是否去下载?")
                                .setPositiveButton("去下载", new DialogInterface.OnClickListener() {
                                    @Override
                                    public void onClick(DialogInterface dialog, int which) {
                                        openApplicationMarket("com.baidu.BaiduMap");
                                    }
                                })
                                .setNegativeButton("不了", new DialogInterface.OnClickListener() {
                                    @Override
                                    public void onClick(DialogInterface dialog, int which) {
                                        dialog.dismiss();
                                    }
                                }).create().show();
                    }

百度地图可拼接参数:
在这里插入图片描述
腾讯地图的调用:

大佬原文链接: https://blog.csdn.net/ever69/article/details/82427085

                       //判断是否安装腾讯地图
                    if (checkAppInstalled(RoutePlanningActivity.this,"com.tencent.map")){
                        Toast.makeText(RoutePlanningActivity.this, "你安装了腾讯地图", Toast.LENGTH_SHORT).show();
                        
                        Uri uri=Uri.parse("qqmap://map/routeplan?type=drive&tocoord="+endlatitude+","+endlongititude+"&to="+"");
                        Intent intent = new Intent(Intent.ACTION_VIEW,uri);
                        startActivity(intent);
                    }else {
                        new AlertDialog.Builder(RoutePlanningActivity.this)
                                .setTitle("提示")
                                .setMessage("检测到您没有安装腾讯地图,是否去下载?")
                                .setPositiveButton("去下载", new DialogInterface.OnClickListener() {
                                    @Override
                                    public void onClick(DialogInterface dialog, int which) {
                                        openApplicationMarket("com.tencent.map");
                                    }
                                })
                                .setNegativeButton("不了", new DialogInterface.OnClickListener() {
                                    @Override
                                    public void onClick(DialogInterface dialog, int which) {
                                        dialog.dismiss();
                                    }
                                }).create().show();
                    }

腾讯地图可拼接参数:
在这里插入图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值