实现百度地图和高德地图导航(方式)
如图:根据第三方地图来实现不同的出行方式
第一步:首先判断手机是否安装第三方导航应用如百度地图或者是高德地图 - 没有安装则提示安装应用
/**
* 通过包名获取应用信息
* @param context
* @param packageName
* @return
*/
public static AppInfo getAppInfoByPak(Context context, String packageName) {
PackageManager packageManager = context.getPackageManager();
List<PackageInfo> packageInfos = packageManager.getInstalledPackages(0);
for (PackageInfo packageInfo : packageInfos) {
if (packageName.equals(packageInfo.packageName)) {
AppInfo tmpInfo = new AppInfo();
tmpInfo.setAppName(packageInfo.applicationInfo.loadLabel(packageManager).toString());
tmpInfo.setPackageName(packageInfo.packageName);
tmpInfo.setVersionName(packageInfo.versionName);
tmpInfo.setVersionCode(packageInfo.versionCode);
tmpInfo.setAppIcon(packageInfo.applicationInfo.loadIcon(packageManager));
return tmpInfo;
}
}
return null;
}
第二步:注意首先这里是直接设置终点名称直接导航
/**
* 百度地图 - 直接设置终点 - 这里的type就是选择出行的方式列如:步行,公交等
*/
public void startNative_Baidu1(String address, String type) {
try {
if ("1".equals(isMuBiaoClick)){
Intent intent = Intent.getIntent("intent://map/direction?origin=我的位置&destination="+address+"&mode="+type+"&src=yourCompanyName|yourAppName#Intent;scheme=bdapp;package=com.baidu.BaiduMap;end");
startActivity(intent);
}else if ("2".equals(isMuBiaoClick)){
Intent intent = new Intent();
intent.setData(Uri.parse("baidumap://map/geocoder?src=openApiDemo&address="+address));
startActivity(intent);
}
} catch (Exception e) {
e.printStackTrace();
Toast.makeText(TakeMeActivity.this, "地址解析错误", Toast.LENGTH_SHORT).show();
}
}
/**
* 高德地图
*/
public void startNative_Gaode1(String address) {
try {
if ("1".equals(isMuBiaoClick)){
Intent intent = Intent.getIntent("androidamap://route?sourceApplication=softname&sname=我的位置&dname="+address+"&dev=0&m=0&t=1");
intent.setPackage("com.autonavi.minimap");
startActivity(intent);
}else if ("2".equals(isMuBiaoClick)){
Intent intent = Intent.getIntent("androidamap://route?sourceApplication=softname&sname="+address+"&dev=0&m=0&t=1");
intent.setPackage("com.autonavi.minimap");
startActivity(intent);
}
} catch (Exception e) {
e.printStackTrace();
Toast.makeText(TakeMeActivity.this, "地址解析错误", Toast.LENGTH_SHORT).show();
}
}
ok,核心代码已经贴出,这两个方法主要就是目标位置直接进行传递(String),再由我的当前位置做为起点进行导航。
总结:这几个方面其实相对来说都比较简单,相信你肯定知道,关键点其实在于在跳转第三方应用的时候intent传递的数据怎么去写? 下面就来为大家介绍一下:
1.首先,你要知道一点知识
1.1: 导航一定有起点和终点,一般起点和终点有两种形式:
1.2:坐标一般常见的有三种火星坐标、百度坐标、高德坐标
1.3: 通过百度定位或者通过名字反编码出来的坐标都是百度坐标
1.4:导航参数中如果有坐标,坐标的优先级大于名字
2.测试大致的可分为6种
1.起点终点都是坐标使用高德
2.起点终点都是名称使用高德
3.当前位置到终点使用高德
4.起点终点都是坐标使用百度
5.起点终点都是名称使用百度
6.当前位置到终点使用百度
高德
private static final double LATITUDE_A = 28.1903; //起点纬度
private static final double LONGTITUDE_A = 113.031738; //起点经度
private static final double LATITUDE_B = 28.187519; //终点纬度
private static final double LONGTITUDE_B = 113.029713; //终点经度
高德1起点和终点的坐标如下
/**
* 确定起终点坐标BY高德
*/
void setUpGaodeAppByLoca(){
try {
Intent intent = Intent.getIntent("androidamap://route?sourceApplication=softname&slat="+LATITUDE_A+"&slon="+LONGTITUDE_A+"&sname="+"万家丽国际Mall"+"&dlat="+LATITUDE_B+"&dlon="+LONGTITUDE_B+"&dname="+"东郡华城广场|A座"+"&dev=0&m=0&t=1");
if(isInstallByread("com.autonavi.minimap")){
startActivity(intent);
Log.e(TAG, "高德地图客户端已经安装") ;
}else {
Log.e(TAG, "没有安装高德地图客户端") ;
}
} catch (URISyntaxException e) {
e.printStackTrace();
}
}
高德2起点终点都是名称
/**
* 确认起终点名称BY高德
*/
void setUpGaodeAppByName(){
try {
Intent intent = Intent.getIntent("androidamap://route?sourceApplication=softname"+"&sname="+"万家丽国际Mall"+"&dname="+"东郡华城广场|A座"+"&dev=0&m=0&t=1");
if(isInstallByread("com.autonavi.minimap")){
startActivity(intent);
Log.e(TAG, "高德地图客户端已经安装") ;
}else {
Log.e(TAG, "没有安装高德地图客户端") ;
}
} catch (URISyntaxException e) {
e.printStackTrace();
}
}
高德3第三个情况实际上是最好用的方法,如下
/**
* 我的位置BY高德
*/
void setUpGaodeAppByMine(){
try {
Intent intent = Intent.getIntent("androidamap://route?sourceApplication=softname&sname=我的位置&dlat="+LATITUDE_B+"&dlon="+LONGTITUDE_B+"&dname="+"东郡华城广场|A座"+"&dev=0&m=0&t=1");
if(isInstallByread("com.autonavi.minimap")){
startActivity(intent);
Log.e(TAG, "高德地图客户端已经安装") ;
}else {
Log.e(TAG, "没有安装高德地图客户端") ;
}
} catch (URISyntaxException e) {
e.printStackTrace();
}
}
下面的是调用百度地图app,同样通过百度拾取 取了两个位置的百度坐标
private static final double LATITUDE_QIDIAN = 28.196744; //起点纬度
private static final double LONGTITUDE_QIDIAN = 113.037904; //起点经度
private static final double LATITUDE_ZHONGDIAN = 28.193159; //终点纬度
private static final double LONGTITUDE_ZHONGDIAN = 113.036427; //终点经度
百度1使用起点和终点的坐标
/**
* 注意下面的起终点坐标都是百度坐标,如果使用高德坐标系有很大的误差
*/
void setUpBaiduAPPByLoca(){
try {
Intent intent = Intent.getIntent("intent://map/direction?origin=latlng:"+LATITUDE_QIDIAN+","+LONGTITUDE_QIDIAN+"|name:万家丽国际Mall&destination=latlng:"+LATITUDE_ZHONGDIAN+","+LONGTITUDE_ZHONGDIAN+"|name:东郡华城广场|A座&mode=driving&src=yourCompanyName|yourAppName#Intent;scheme=bdapp;package=com.baidu.BaiduMap;end");
if(isInstallByread("com.baidu.BaiduMap")){
startActivity(intent);
Log.e(TAG, "百度地图客户端已经安装") ;
}else {
Log.e(TAG, "没有安装百度地图客户端") ;
}
} catch (URISyntaxException e) {
e.printStackTrace();
}
}
百度2起点和终点两个名称
/**
* 通过起终点名字使用百度地图
*/
void setUpBaiduAPPByName(){
try {
Intent intent = Intent.getIntent("intent://map/direction?origin=万家丽国际Mall&destination=东郡华城广场|A座&mode=driving&src=yourCompanyName|yourAppName#Intent;scheme=bdapp;package=com.baidu.BaiduMap;end");
if(isInstallByread("com.baidu.BaiduMap")){
startActivity(intent);
Log.e(TAG, "百度地图客户端已经安装") ;
}else {
Log.e(TAG, "没有安装百度地图客户端") ;
}
} catch (URISyntaxException e) {
e.printStackTrace();
}
}
百度3当前位置到终点导航规划路线
/**
* 我的位置到终点通过百度地图
*/
void setUpBaiduAPPByMine(){
try {
Intent intent = Intent.getIntent("intent://map/direction?origin=我的位置&destination=东郡华城广场|A座&mode=driving&src=yourCompanyName|yourAppName#Intent;scheme=bdapp;package=com.baidu.BaiduMap;end");
if(isInstallByread("com.baidu.BaiduMap")){
startActivity(intent);
Log.e(TAG, "百度地图客户端已经安装") ;
}else {
Log.e(TAG, "没有安装百度地图客户端") ;
}
} catch (URISyntaxException e) {
e.printStackTrace();
}
}
总结:ok,这里相信你对intent里面的数据传递会有更好的理解。