不为0则switch进行调用if (packages.size() == 0) {
MyToast.show("请安装地图应用", Toast.LENGTH_LONG);
} else {
for (String packageName : packages) {
switch (packageName) {
case BAIDUMAP_PACKAGENAME:
invokeBaiDuMap(context, arg);
break;
case AUTONAVI_PACKAGENAME:
invokeAuToNaveMap(context, arg);
break;
case QQMAP_PACKAGENAME:
invokeQQMap(context, arg);
break;
}
}
}
下面介绍一下三个arg的格式和三个调用方法/**
* 调用百度地图----------------
*
* @param context 上下文对象
* @param arg 参数
*/
private static void invokeBaiDuMap(Context context, Map arg) {
try {
Uri uri = Uri.parse("baidumap://map/geocoder?" +
"location=" + arg.get(GCJO2_LAT) + "," + arg.get(GCJO2_LNG) +
"&name=" + arg.get(DESTINATION) + //终点的显示名称
"&coord_type=gcj02");//坐标 (百度同样支持他自己的db0911的坐标,但是高德和腾讯不支持)
Intent intent = new Intent();
intent.setPackage(BAIDUMAP_PACKAGENAME);
intent.setData(uri);
context.startActivity(intent);
} catch (Exception e) {
Logger.e(TAG, e.getMessage());
}
}
/**
* 调用高德地图
*
* @param context 上下文对象s
* @param arg 经纬度参数map
*/
private static void invokeAuToNaveMap(Context context, Map arg) {
try {
Uri uri = Uri.parse("androidamap://route?sourceApplication={你的应用名称}" +
"&dlat=" + arg.get(GCJO2_LAT)//终点的纬度
+ "&dlon=" + arg.get(GCJO2_LNG)//终点的经度
+ "&dname=" + arg.get(DESTINATION)终点的显示名称
+ "&dev=0&m=0&t=0");
Intent intent = new Intent("android.intent.action.VIEW", uri);
intent.addCategory("android.intent.category.DEFAULT");
context.startActivity(intent);
} catch (Exception e) {
Logger.e(TAG, e.getMessage());
}
}
/**
* 调用腾讯地图
*
* @param context 上下文对象s
* @param arg 经纬度参数map
*/
private static void invokeQQMap(Context context, Map arg) {
try {
Uri uri = Uri.parse("qqmap://map/routeplan?type=drive" +
"&to=" + arg.get(DESTINATION)//终点的显示名称 必要参数
+ "&tocoord=" + arg.get(GCJO2_LAT) + "," + arg.get(GCJO2_LNG)//终点的经纬度
+ "&referer={你的应用名称}");
Intent intent = new Intent();
intent.setData(uri);
context.startActivity(intent);
} catch (Exception e) {
Logger.e(TAG, e.getMessage());
}
}