我是靠谱客的博主 可爱鸭子,最近开发中收集的这篇文章主要介绍android 通过scheme唤起百度、高德、腾讯地图路线规划功能,唤起滴滴出行打车功能,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import java.util.ArrayList;
import java.util.List;
/**
* 文件描述 :
* 唤起百度、高德、腾讯地图路线规划功能,唤起滴滴出行打车功能
* 此工具类不能保证一直有效,若不能唤起请到官网查看文档并调整参数
* 文档地址 :
* 百度地图 : http://lbsyun.baidu.com/index.php?title=uri/api/android
* 高德地图 : https://lbs.amap.com/api/amap-mobile/guide/android/route
* 腾讯地图 : https://lbs.qq.com/uri_v1/guide-mobile-navAndRoute.html
* 滴滴出行 : http://developer.xiaojukeji.com/doc/sdk/api/app.html
*
* 创建人员 : 幽默GUY
* 创建日期 : 2019/01/20 0025
* 创建时间 : 10:03
* 最后修改 :
*/
public class NavigationTool {
/**
* 地图类型
* BAIDU:百度地图,GAODE:高德地图,TECENT:腾讯地图
*/
public enum Type {
BAIDU, GAODE, TECENT
}
/**
* 交通方式
* WALK:步行,RIDE:骑行,BUS:公交,DRIVE:驾车
*/
public enum Method {
WALK, RIDE, BUS, DRIVE
}
//包名
public static final String PACKAGE_NAME_BAIDU_MAP = "com.baidu.BaiduMap";
public static final String PACKAGE_NAME_GAODE_MAP = "com.autonavi.minimap";
public static final String PACKAGE_NAME_TECENT_MAP = "com.tencent.map";
public static final String PACKAGE_NAME_DIDI = "com.sdu.didi.psnger";
//url scheme
private static final String BAIDU_URL_SCHEME = "baidumap://map/direction";
private static final String GAODE_URL_SCHEME = "amapuri://route/plan/";
private static final String TECENT_URL_SCHEME = "qqmap://map/routeplan";
private static final String DIDI_URL_SCHEME = "OneTravel://dache/sendorder";
//公司名称
private static final String COMPANY_NAME = "company";
//应用名称
private static final String APP_NAME = "app_name";
//腾讯地图开发者APP_KEY
private static final String TECENT_APP_KEY = "你的app key";
/**
* 得到已安装的地图软件
* @param context
* @return
*/
public static Type[] getMapSoftwareTypes(Context context) {
List<Type> list = new ArrayList<>();
if (AppTool.hasInstalled(context, PACKAGE_NAME_BAIDU_MAP))
list.add(Type.BAIDU);
if (AppTool.hasInstalled(context, PACKAGE_NAME_GAODE_MAP))
list.add(Type.GAODE);
if (AppTool.hasInstalled(context, PACKAGE_NAME_TECENT_MAP))
list.add(Type.TECENT);
return list.toArray(new Type[0]);
}
/**
* 得到已安装的地图软件
* @param types
* @return
*/
public static String[] getMapSoftwareNames(Type[] types) {
List<String> list = new ArrayList<>();
for (Type type : types) {
switch (type) {
case BAIDU:
list.add("百度地图");
break;
case GAODE:
list.add("高德地图");
break;
case TECENT:
list.add("腾讯地图");
break;
default:
break;
}
}
return list.toArray(new String[0]);
}
/**
* 根据类型得到包名
* @param type
* @return
*/
private static String getPackageName(Type type) {
switch (type) {
case BAIDU:
return PACKAGE_NAME_BAIDU_MAP;
case GAODE:
return PACKAGE_NAME_GAODE_MAP;
case TECENT:
return PACKAGE_NAME_TECENT_MAP;
default:
return null;
}
}
/**
* 唤起路线规划
* @param context 上下文
* @param type 地图类型
* @param method 交通方式
* @param latitude 目的地纬度
* @param longitude 目的地终点经度
* @param name 目的地名称
*/
public static boolean start(Context context, Type type, Method method, String latitude, String longitude, String name) {
//判断是否已安装该软件
if (!AppTool.hasInstalled(context, getPackageName(type)))
return false;
switch (type) {
case BAIDU:
baidu(context, method, latitude, longitude, name);
break;
case GAODE:
gaode(context, method, latitude, longitude, name);
break;
case TECENT:
tecent(context, method, latitude, longitude, name);
break;
default:
break;
}
return true;
}
/**
* 百度地图路线规划
* @param context
* @param method
* @param latitude
* @param longitude
* @param name
*/
public static void baidu(Context context, Method method, String latitude, String longitude, String name) {
StringBuffer data = new StringBuffer(BAIDU_URL_SCHEME)
.append("?coord_type=bd09ll&src=")
.append("andr.")
.append(COMPANY_NAME)
.append(".")
.append(APP_NAME)
.append("&destination=");
if (name != null)
data.append("name:").append(name).append("|");
data.append("latlng:")
.append(latitude)
.append(",")
.append(longitude)
.append("&mode=");
switch (method) {
case WALK:
data.append("walking");
break;
case RIDE:
data.append("riding");
break;
case BUS:
data.append("transit");
break;
case DRIVE:
data.append("driving");
break;
}
startActivity(context, data.toString());
}
/**
* 高德地图路线规划
* @param context
* @param method
* @param latitude
* @param longitude
* @param name
*/
public static void gaode(Context context, Method method, String latitude, String longitude, String name) {
StringBuffer data = new StringBuffer(GAODE_URL_SCHEME)
.append("?dev=0&sourceApplication=")
.append(APP_NAME)
.append("&dname=")
.append(name)
.append("&dlat=")
.append(latitude)
.append("&dlon=")
.append(longitude)
.append("&t=");
switch (method) {
case WALK:
data.append("2");
break;
case RIDE:
data.append("3");
break;
case BUS:
data.append("1");
break;
case DRIVE:
data.append("0");
break;
}
startActivity(context, data.toString());
}
/**
* 腾讯地图路线规划
* @param context
* @param method
* @param latitude
* @param longitude
* @param name
*/
public static void tecent(Context context, Method method, String latitude, String longitude, String name) {
StringBuffer data = new StringBuffer(TECENT_URL_SCHEME)
.append("?referer=")
.append(TECENT_APP_KEY)
.append("&to=")
.append(name)
.append("&tocoord=")
.append(latitude)
.append(",")
.append(longitude)
.append("&type=");
switch (method) {
case WALK:
data.append("walk");
break;
case RIDE:
data.append("bike");
break;
case BUS:
data.append("bus");
break;
case DRIVE:
data.append("drive");
break;
}
startActivity(context, data.toString());
}
/**
* 唤起滴滴出行
* @param context
* @param latitude
* @param longitude
*/
public static void didi(Context context, String latitude, String longitude) {
StringBuffer data = new StringBuffer(DIDI_URL_SCHEME)
.append("?source=")
.append(APP_NAME)
.append("&dlat=")
.append(latitude)
.append("&dlon=")
.append(longitude);
startActivity(context, data.toString());
}
/**
* 通过url scheme唤起软件
* @param context
* @param data
*/
public static void startActivity(Context context, String data) {
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.addCategory(Intent.CATEGORY_DEFAULT);
intent.setData(Uri.parse(data));
context.startActivity(intent);
}
}
AppTool代码:
public class AppTool {
/**
* 根据包名判断是否已安装该软件
* @param context
* @param packageName
* @return
*/
public static boolean hasInstalled(Context context, String packageName) {
PackageInfo packageInfo;
try {
packageInfo = context.getPackageManager().getPackageInfo(packageName, 0);
} catch (PackageManager.NameNotFoundException e) {
packageInfo = null;
}
return packageInfo != null;
}
}
最后
以上就是可爱鸭子为你收集整理的android 通过scheme唤起百度、高德、腾讯地图路线规划功能,唤起滴滴出行打车功能的全部内容,希望文章能够帮你解决android 通过scheme唤起百度、高德、腾讯地图路线规划功能,唤起滴滴出行打车功能所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复