最近在项目中需要地图导航功能,但是导入第三方地图导航包的话,应用打出包后会很大,所以考虑到可以通过调用外部地图应用来解决,参考了微信打开外部地图的做法,有了下面的解决办法:
原理
- 通过高德、百度、腾讯提供的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'
}