Android应用内打开高德、百度、腾讯地图app

最近在项目中需要地图导航功能,但是导入第三方地图导航包的话,应用打出包后会很大,所以考虑到可以通过调用外部地图应用来解决,参考了微信打开外部地图的做法,有了下面的解决办法:

原理

  • 通过高德、百度、腾讯提供的Uri打开应用外部地图app.

高德、百度、腾讯官方uri调起app文档传送门##

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

关键代码

-以高德地图为例:

    /**
     * 打开高德
     *
     * @param latitude
     * @param longitude
     */
    private static void openGaode(Activity activity, String title, double latitude, double longitude) {
        if (AppUtils.isAvilible("com.autonavi.minimap")) {
            Intent intent = new Intent();
            intent.setAction(Intent.ACTION_VIEW);
            intent.addCategory(Intent.CATEGORY_DEFAULT);

            //将功能Scheme以URI的方式传入data
            Uri uri = Uri.parse("androidamap://route/plan/?dlat=" + latitude + "&dlon=" + longitude + "&dname=" + title + "&dev=0&t=0");
            intent.setData(uri);

            //启动该页面即可
            activity.startActivity(intent);
        } else {
            ToastUtils.showToast("您尚未安装高德地图");
            Uri uri = Uri.parse("market://details?id=com.autonavi.minimap");
            Intent intent = new Intent(Intent.ACTION_VIEW, uri);
            if (intent.resolveActivity(activity.getPackageManager()) != null) {
                activity.startActivity(intent);
            }
        }
    }

需要注意的地方

-1.由于自己应用中集成的是高德地图,用的是GCJ-02坐标系(火星坐标系),所以当打开百度地图时需要进行坐标转换,将火星坐标系转换成百度坐标系BD09。
具体看代码: CoodinateCovertor.java

使用方法

-1.Add it in your root build.gradle at the end of repositories:

allprojects {
        repositories {
            ...
            maven { url 'https://jitpack.io' }
        }
    }

-2.Add the dependency

dependencies {
            compile 'com.github.lintianlin:OpenMapDemo:v1.0.0'
    }

示例效果

Android应用内打开高德、百度、腾讯地图app_第1张图片
pic4.jpg
Android应用内打开高德、百度、腾讯地图app_第2张图片
pic1.jpg
Android应用内打开高德、百度、腾讯地图app_第3张图片
pic2.jpg
Android应用内打开高德、百度、腾讯地图app_第4张图片
pic3.jpg

你可能感兴趣的:(Android应用内打开高德、百度、腾讯地图app)