应用内调用三大主流地图软件并导航
2019-08-17 本文已影响0人
Mingho96
一、准备
通常地,在打开一个第三方软件前,要判断它是否安装,如果没安装,要么给出相应提示,要么跳转到应用市场。这里我们简单点,直接给提示。在下面的方法中,传入上下文和要判断的应用的包名:
public static boolean isPackageInstalled(Context mContext, String packagename) {
PackageInfo packageInfo = null;
try {
packageInfo = mContext.getPackageManager().getPackageInfo(packagename, 0);
} catch (PackageManager.NameNotFoundException e) {
packageInfo = null;
e.printStackTrace();
} finally {
Log.i("app is install?--->", String.valueOf(packageInfo!=null));
return packageInfo != null;
}
}
二、开始
创建打开第三方应用并传递参数的方法(以高德地图为例)
/**
* 启动高德App进行导航
* @param lat 目的地纬度
* @param lng 目的地经度
*/
public static void openGaoDeNavi(double lat,double lng) {
StringBuffer stringBuffer = new StringBuffer("androidamap://navi?sourceApplication=")
.append("amap").append("&lat=").append(lat)
.append("&lon=").append(lng)
.append("&dev=").append(1)
.append("&style=").append(0);
Intent intent = new Intent(Intent.ACTION_VIEW, android.net.Uri.parse(stringBuffer.toString()));
intent.addCategory(Intent.CATEGORY_DEFAULT);
intent.setPackage("com.autonavi.minimap");
cont.startActivity(intent);
}
三、使用
if (isPackageInstalled(MainActivity.this,"com.autonavi.minimap"))
{
MapUtils.openGaoDeNavi(32.543401,101.111101);
}
else
Toast.makeText(MainActivity.this, "你没安装高德地图", Toast.LENGTH_SHORT).show();
四、封装工具类MapUtils.java
public class MapUtils {
@SuppressLint("StaticFieldLeak")
private static Context cont;
public static void init(Context context){
cont=context;
}
/**
* 启动高德App进行导航
* @param lat 目的地纬度
* @param lng 目的地经度
*/
public static void openGaoDeNavi(double lat,double lng) {
StringBuffer stringBuffer = new StringBuffer("androidamap://navi?sourceApplication=")
.append("amap").append("&lat=").append(lat)
.append("&lon=").append(lng)
.append("&dev=").append(1)
.append("&style=").append(0);
Intent intent = new Intent(Intent.ACTION_VIEW, android.net.Uri.parse(stringBuffer.toString()));
intent.addCategory(Intent.CATEGORY_DEFAULT);
intent.setPackage("com.autonavi.minimap");
cont.startActivity(intent);
}
/**
* 打开腾讯地图app并导航
* @param lat 目的地纬度
* @param lng 目的地经度
*/
public static void openTencentNavi(double lat,double lng){
StringBuffer stringBuffer= new StringBuffer("qqmap://map/routeplan?type=drive")
.append("&fromcoord=CurrentLocation")
.append("&tocoord=").append(lat).append(",").append(lng)
// .append("&to=吉庚")
.append("&referer=OB4BZ-D4W3U-B7VVO-4PJWW-6TKDJ-WPB77");
Intent intent = new Intent(Intent.ACTION_VIEW, android.net.Uri.parse(stringBuffer.toString()));
intent.addCategory(Intent.CATEGORY_DEFAULT);
intent.setPackage("com.tencent.map");
cont.startActivity(intent);
}
/**
* 打开百度地图导航客户端
* @param lat 目的地纬度
* @param lng 目的地经度
*/
public static void openBaiduNavi(double lat,double lng) {
StringBuffer stringBuffer = new StringBuffer("baidumap://map/navi?location=")
.append(lat).append(",")
.append(lng)
.append("&type=TIME");
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(stringBuffer.toString()));
intent.setPackage("com.baidu.BaiduMap");
cont.startActivity(intent);
}
}
五、特别鸣谢
安卓通过经纬度,实现intent调用百度,高德,Google地图客户端实现驾车导航功能
Android App调用跳转百度地图、高德地图、腾讯地图进行目的地导航
六、参考文献
各大地图的详细配置参数,可以查阅官方接口文档
1、百度地图:http://lbsyun.baidu.com/index.php?title=uri/api/android
2、高德地图:https://lbs.amap.com/api/amap-mobile/guide/android/navigation
3、腾讯地图:http://lbs.qq.com/uri_v1/guide-mobile-navAndRoute.html