最近做一个新项目,需要用到导航,项目集成了高德的SDK,所以本来想直接用SDK内的导航方法,但是发现高德最新版的导航改版了,如果SDK内加上导航模块会使得整个项目大十几二十M,所以决定弃用SDK内的导航,最终决定,采用以下方案:
1.当手机内有高德地图app时,调起此app来导航
2.当手机内有百度地图app时,调起此app来导航
3.当手机内既没有高德地图app,也没有百度地图app时,调起浏览器,进入高德网页导航
代码很简单,如下:
1.
判断是否安装了高德地图,若有则传入导航参数并调起:
if (isInstallApk(mContext, "com.autonavi.minimap")) {// 是否安装了高德
Intent intents = new Intent();
intents.setData(Uri.parse("androidamap://navi?sourceApplication=nyx_super&lat=" + wLatLng.latitude + "&lon=" + wLatLng.longitude + "&dev=0&style=2"));
startActivity(intents); // 启动调用
}
以上是uri内的参数说明,可根据自己的需求增加字段
高德关于此功能的网址:点这里
2.
判断是否安装了百度地图,若有则传入导航参数并调起:
if (isInstallApk(mContext, "com.baidu.BaiduMap")) {// 是否安装了百度地图
Intent intent = new Intent();
// 驾车导航
intent.setData(Uri.parse("baidumap://map/navi?location=" + CommonUtils.bd_encrypt(wLatLng.latitude, wLatLng.longitude)));
startActivity(intent); // 启动调用
}
百度的此功能与高德不一样,不同的导航方式,其uri的前缀是不同的,具体可参考官网,网址如下:点这里
3.
当手机内既没有高德地图app,也没有百度地图app时,调起浏览器,进入高德网页导航
if (!isInstallApk(mContext, "com.autonavi.minimap")&&!isInstallApk(mContext, "com.baidu.BaiduMap")) {
Intent intent = new Intent();
intent.setAction("android.intent.action.VIEW");
// 驾车导航
intent.setData(Uri.parse("http://uri.amap.com/navigation?from=" + cLatLng.longitude + "," + cLatLng.latitude + "&to="+ wLatLng.longitude + "," + wLatLng.latitude + "&mode=car&src=nyx_super"));
startActivity(intent); // 启动调用
}
高德关于此功能的网址:点这里
最后把isInstallApk方法发出:
/** 判断手机中是否安装指定包名的软件 */
public static boolean isInstallApk(Context context, String name) {
List<PackageInfo> packages = context.getPackageManager().getInstalledPackages(0);
for (int i = 0; i < packages.size(); i++) {
PackageInfo packageInfo = packages.get(i);
if (packageInfo.packageName.equals(name)) {
return true;
} else {
continue;
}
}
return false;
}
看完如有帮助记得点赞
转载自原文链接, 如需删除请联系管理员。
原文链接:跳转到高德地图或百度地图或高德网页导航,转载请注明来源!