Android App跳转至百度,高德App的驾车(路线)规划

2024-03-02 20:40

本文主要是介绍Android App跳转至百度,高德App的驾车(路线)规划,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前段时间做要做个功能,判断手机是否装有百度,高德App,安装哪个弹出哪个,点击地图后跳转至App的驾车路线规划部分。
做这个功能其实本身不难,就是这其中需求各种改动,有些东西没处理好。
效果图:
这里写图片描述
过程:写一个PopupWindow,写布局,判断手机是否装有地图app,有则展示,没有不展示。集成百度地图获取到当前手机位置的经纬度,然后获取后台数据时每条数据都有目的地地址的经纬度,都是用的百度坐标系的经纬度。点击哪个地图后根据当前经纬度和目的地经纬度,目的地位置进行驾车路线规划。点击高德地图时先把将百度用的坐标系经纬度转换为高德用的坐标系经纬度。

判断是否装有哪个软件,传入软件的包名:

/*** Created by fsx on 2017/7/24.* 判断是否安装某一软件*/
public class AppInstalledUtils {public static boolean isAppInstalled(Context context, String packageName) {PackageManager packageManager = context.getPackageManager();//获取所有已安装程序的包信息List<PackageInfo> pInfo = packageManager.getInstalledPackages(0);//存储所有已安装程序的包名List<String> pName = new ArrayList<>();//从info中将报名字逐一取出if (pInfo != null) {for (int i = 0; i < pInfo.size(); i++) {String pn = pInfo.get(i).packageName;pName.add(pn);}}return pName.contains(packageName);}
}

高德:

AppInstalledUtils.isAppInstalled(getContext(), "com.autonavi.minimap")

百度:

AppInstalledUtils.isAppInstalled(getContext(), "com.baidu.BaiduMap")

坐标的实体类(get set有删减):

/*** Created by fsx on 2017/8/24.* 坐标*/
public class MyLatLngPoint {private double lat;private double lng;public MyLatLngPoint(double lat, double lng) {this.lat = lat;this.lng = lng;}
}

转换坐标的实体类


private final static double PI = 3.14159265358979324;
private final static double x_pi = 3.14159265358979324 * 3000.0 / 180.0;/*** 百度转国测局* 百度转国策局* @param point* @return*/public static MyLatLngPoint bd2gcj(MyLatLngPoint point) {double bdLon = point.getLng();double bdLat = point.getLat();double x = bdLon - 0.0065;double y = bdLat - 0.006;double z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * x_pi);double theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * x_pi);double gcjLon = z * Math.cos(theta);double gcjLat = z * Math.sin(theta);return new MyLatLngPoint(gcjLat, gcjLon);//{'lat' : gcjLat, 'lon' : gcjLon};}

打开高德地图的驾车路线规划:

/*** 打开高德*/private void openGaoDeMap() {intent = new Intent();intent.setAction(Intent.ACTION_VIEW);intent.addCategory(Intent.CATEGORY_DEFAULT);//获取本地存储的百度经纬度lon = Double.valueOf((String) SPUtils.get(MyApplication.getContext(), "lon", new String("4.9E-324")));lat = Double.valueOf((String) SPUtils.get(MyApplication.getContext(), "lat", new String("4.9E-324")));MyLatLngPoint point = null;if (lon != 4.9E-324 && lat != 4.9E-324) {point = new MyLatLngPoint(lat, lon);point = CoordMath.bd2gcj(point);} else {lat = 28.208915;lon = 112.985274;point = new MyLatLngPoint(lat,lon);}MyLatLngPoint point1 = null;if(shopLat!=0 && shopLon!=0){point1 = new MyLatLngPoint(shopLat, shopLon);point1 = CoordMath.bd2gcj(point1);}Uri uri = Uri.parse("amapuri://route/plan/?sid=BGVIS1&slat=" + point.getLat() + "&slon=" + point.getLng() + "&sname=" + MyUrl.getAddressMessage() + "&did=BGVIS2&dlat="+point1.getLat()+"&dlon="+point1.getLng()+"&dname="+address+"&dev=0&t=0");intent.setData(uri);//启动该页面即可mActivity.startActivity(intent);//将popupWindow dismiss掉mPopup.dismiss();}

打开百度地图的驾车路线规划:

/*** 打开百度地图的驾车路线规划界面*/private void openBaiDuMap() {intent = new Intent();lon = Double.valueOf((String) SPUtils.get(MyApplication.getContext(), "lon", new String("4.9E-324")));lat = Double.valueOf((String) SPUtils.get(MyApplication.getContext(), "lat", new String("4.9E-324")));if (lon != 4.9E-324 && lat != 4.9E-324) {intent.setData(Uri.parse("baidumap://map/direction?region=湖南&origin=" + lat + "," + lon + "&destination=" + address + "&mode=driving"));} else {intent.setData(Uri.parse("baidumap://map/direction?region=湖南&origin=" + MyUrl.getAddressMessage() + "&destination=" + address + "&mode=driving"));}mActivity.startActivity(intent);mPopup.dismiss();}

上述url中各参数的具体意义,参考:
百度地图URI API
高德开放平台路线规划

这篇关于Android App跳转至百度,高德App的驾车(路线)规划的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:https://blog.csdn.net/fsx_xiaomei/article/details/78296681
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/767360

相关文章

Android DataBinding 与 MVVM使用详解

《AndroidDataBinding与MVVM使用详解》本文介绍AndroidDataBinding库,其通过绑定UI组件与数据源实现自动更新,支持双向绑定和逻辑运算,减少模板代码,结合MV... 目录一、DataBinding 核心概念二、配置与基础使用1. 启用 DataBinding 2. 基础布局

Android ViewBinding使用流程

《AndroidViewBinding使用流程》AndroidViewBinding是Jetpack组件,替代findViewById,提供类型安全、空安全和编译时检查,代码简洁且性能优化,相比Da... 目录一、核心概念二、ViewBinding优点三、使用流程1. 启用 ViewBinding (模块级

springboot项目中整合高德地图的实践

《springboot项目中整合高德地图的实践》:本文主要介绍springboot项目中整合高德地图的实践,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一:高德开放平台的使用二:创建数据库(我是用的是mysql)三:Springboot所需的依赖(根据你的需求再

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

Android NDK版本迭代与FFmpeg交叉编译完全指南

《AndroidNDK版本迭代与FFmpeg交叉编译完全指南》在Android开发中,使用NDK进行原生代码开发是一项常见需求,特别是当我们需要集成FFmpeg这样的多媒体处理库时,本文将深入分析A... 目录一、android NDK版本迭代分界线二、FFmpeg交叉编译关键注意事项三、完整编译脚本示例四

Android与iOS设备MAC地址生成原理及Java实现详解

《Android与iOS设备MAC地址生成原理及Java实现详解》在无线网络通信中,MAC(MediaAccessControl)地址是设备的唯一网络标识符,本文主要介绍了Android与iOS设备M... 目录引言1. MAC地址基础1.1 MAC地址的组成1.2 MAC地址的分类2. android与I

Android 实现一个隐私弹窗功能

《Android实现一个隐私弹窗功能》:本文主要介绍Android实现一个隐私弹窗功能,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 效果图如下:1. 设置同意、退出、点击用户协议、点击隐私协议的函数参数2. 《用户协议》、《隐私政策》设置成可点击的,且颜色要区分出来res/l

Android实现一键录屏功能(附源码)

《Android实现一键录屏功能(附源码)》在Android5.0及以上版本,系统提供了MediaProjectionAPI,允许应用在用户授权下录制屏幕内容并输出到视频文件,所以本文将基于此实现一个... 目录一、项目介绍二、相关技术与原理三、系统权限与用户授权四、项目架构与流程五、环境配置与依赖六、完整

Android 12解决push framework.jar无法开机的方法小结

《Android12解决pushframework.jar无法开机的方法小结》:本文主要介绍在Android12中解决pushframework.jar无法开机的方法,包括编译指令、框架层和s... 目录1. android 编译指令1.1 framework层的编译指令1.2 替换framework.ja

Android开发环境配置避坑指南

《Android开发环境配置避坑指南》本文主要介绍了Android开发环境配置过程中遇到的问题及解决方案,包括VPN注意事项、工具版本统一、Gerrit邮箱配置、Git拉取和提交代码、MergevsR... 目录网络环境:VPN 注意事项工具版本统一:android Studio & JDKGerrit的邮