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的驾车(路线)规划的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/767360

相关文章

百度/小米/滴滴/京东,中台架构比较

小米中台建设实践 01 小米的三大中台建设:业务+数据+技术 业务中台--从业务说起 在中台建设中,需要规范化的服务接口、一致整合化的数据、容器化的技术组件以及弹性的基础设施。并结合业务情况,判定是否真的需要中台。 小米参考了业界优秀的案例包括移动中台、数据中台、业务中台、技术中台等,再结合其业务发展历程及业务现状,整理了中台架构的核心方法论,一是企业如何共享服务,二是如何为业务提供便利。

动态规划---打家劫舍

题目: 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。 给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。 思路: 动态规划五部曲: 1.确定dp数组及含义 dp数组是一维数组,dp[i]代表

Android实现任意版本设置默认的锁屏壁纸和桌面壁纸(两张壁纸可不一致)

客户有些需求需要设置默认壁纸和锁屏壁纸  在默认情况下 这两个壁纸是相同的  如果需要默认的锁屏壁纸和桌面壁纸不一样 需要额外修改 Android13实现 替换默认桌面壁纸: 将图片文件替换frameworks/base/core/res/res/drawable-nodpi/default_wallpaper.*  (注意不能是bmp格式) 替换默认锁屏壁纸: 将图片资源放入vendo

Android平台播放RTSP流的几种方案探究(VLC VS ExoPlayer VS SmartPlayer)

技术背景 好多开发者需要遴选Android平台RTSP直播播放器的时候,不知道如何选的好,本文针对常用的方案,做个大概的说明: 1. 使用VLC for Android VLC Media Player(VLC多媒体播放器),最初命名为VideoLAN客户端,是VideoLAN品牌产品,是VideoLAN计划的多媒体播放器。它支持众多音频与视频解码器及文件格式,并支持DVD影音光盘,VCD影

软考系统规划与管理师考试证书含金量高吗?

2024年软考系统规划与管理师考试报名时间节点: 报名时间:2024年上半年软考将于3月中旬陆续开始报名 考试时间:上半年5月25日到28日,下半年11月9日到12日 分数线:所有科目成绩均须达到45分以上(包括45分)方可通过考试 成绩查询:可在“中国计算机技术职业资格网”上查询软考成绩 出成绩时间:预计在11月左右 证书领取时间:一般在考试成绩公布后3~4个月,各地领取时间有所不同

poj 2976 分数规划二分贪心(部分对总体的贡献度) poj 3111

poj 2976: 题意: 在n场考试中,每场考试共有b题,答对的题目有a题。 允许去掉k场考试,求能达到的最高正确率是多少。 解析: 假设已知准确率为x,则每场考试对于准确率的贡献值为: a - b * x,将贡献值大的排序排在前面舍弃掉后k个。 然后二分x就行了。 代码: #include <iostream>#include <cstdio>#incl

代码随想录冲冲冲 Day39 动态规划Part7

198. 打家劫舍 dp数组的意义是在第i位的时候偷的最大钱数是多少 如果nums的size为0 总价值当然就是0 如果nums的size为1 总价值是nums[0] 遍历顺序就是从小到大遍历 之后是递推公式 对于dp[i]的最大价值来说有两种可能 1.偷第i个 那么最大价值就是dp[i-2]+nums[i] 2.不偷第i个 那么价值就是dp[i-1] 之后取这两个的最大值就是d

android-opencv-jni

//------------------start opencv--------------------@Override public void onResume(){ super.onResume(); //通过OpenCV引擎服务加载并初始化OpenCV类库,所谓OpenCV引擎服务即是 //OpenCV_2.4.3.2_Manager_2.4_*.apk程序包,存

从状态管理到性能优化:全面解析 Android Compose

文章目录 引言一、Android Compose基本概念1.1 什么是Android Compose?1.2 Compose的优势1.3 如何在项目中使用Compose 二、Compose中的状态管理2.1 状态管理的重要性2.2 Compose中的状态和数据流2.3 使用State和MutableState处理状态2.4 通过ViewModel进行状态管理 三、Compose中的列表和滚动

数学建模笔记—— 非线性规划

数学建模笔记—— 非线性规划 非线性规划1. 模型原理1.1 非线性规划的标准型1.2 非线性规划求解的Matlab函数 2. 典型例题3. matlab代码求解3.1 例1 一个简单示例3.2 例2 选址问题1. 第一问 线性规划2. 第二问 非线性规划 非线性规划 非线性规划是一种求解目标函数或约束条件中有一个或几个非线性函数的最优化问题的方法。运筹学的一个重要分支。2