技术标签: 唤起第三方地图api android 路线规划 关于高德地图问题总结
上篇信息我们讲到了在地图中通过Search类进行动态路线规划,这篇我们来讲到通过app 调起手机自带的导航软件,进行路线的查询。显示的效果
我们这边需要先自定义需要的弹窗布局,在用户点击的时候,弹出选择布局,然后进行指定软件的导航选择。我们这边默认规划的路线是驾车路线,可以在调起api里面进行设置,下面我们来看实现;
1、先确定我们需要实现的几个地图,我们这边就先介绍常用的,高德、百度、腾讯这几款。
public static final String PN_GAODE_MAP = "com.autonavi.minimap";// 高德地图包名
public static final String PN_BAIDU_MAP = "com.baidu.BaiduMap"; // 百度地图包名
public static final String PN_TENCENT_MAP = "com.tencent.map"; // 腾讯地图包名
2、我们提供一个MapUtil工具类,暴露接口可以直接给其他地方调用。
public class MapUtils {
public static final String PN_GAODE_MAP = "com.autonavi.minimap";// 高德地图包名
public static final String PN_BAIDU_MAP = "com.baidu.BaiduMap"; // 百度地图包名
public static final String PN_TENCENT_MAP = "com.tencent.map"; // 腾讯地图包名
private static Context mContext;
private static double startLat;
private static double startLng;
private static String startName;
private static double endLat;
private static double endLng;
private static String endName;
public static void startDialog(Context mContext, double startLat, double startLng, String startName, double endLat, double endLng, String endName){
MapUtils.mContext = mContext;
MapUtils.startLat = startLat;
MapUtils.startLng = startLng;
MapUtils.endLat = endLat;
MapUtils.endLng = endLng;
MapUtils.endName = endName;
BottomDialog dialog = BottomDialog.create(((FragmentActivity) mContext).getSupportFragmentManager());
boolean flag = isPackageInstalled(mContext,PN_BAIDU_MAP);
boolean flag1 = isPackageInstalled(mContext,PN_GAODE_MAP);
if(flag || flag1){
int dpValue = 70 + 50 * ((flag ? 1:0) +(flag1 ? 1:0));
dialog.setLayoutRes(R.layout.dialog_select_map)
.setHeight(MSizeUtils.dp2px(mContext, dpValue))
.show();
}else{
ToastUtil.show("未安装地图导航软件");
}
dialog.setViewListener(v -> {
TextView tvBaidu = v.findViewById(R.id.tv_baidu);
TextView tvGaode = v.findViewById(R.id.tv_gaode);
TextView tvCancledialog = v.findViewById(R.id.tv_cancledialog);
tvBaidu.setVisibility(flag ? View.VISIBLE : View.GONE);
tvGaode.setVisibility(flag1 ? View.VISIBLE : View.GONE);
tvBaidu.setOnClickListener(v1 -> {
// 百度地图
double[] start = gaoDeToBaidu(startLng,startLat);
double[] end = gaoDeToBaidu(endLng,endLat);
Intent naviIntent = new Intent("android.intent.action.VIEW", android.net.Uri.parse("baidumap://map/direction?origin=name:"+startName+"|latlng:"+start[1]+","+start[0]+"&destination=latlng:"+end[1]+","+end[0]+"|name:"+endName+"&mode=driving"));
mContext.startActivity(naviIntent);
dialog.dismiss();
});
tvGaode.setOnClickListener(v12 -> {
// 高德地图
Intent naviIntent = new Intent("android.intent.action.VIEW", android.net.Uri.parse("androidamap://route?sourceApplication=appName&slat="+startLat+"&slon="+startLng+"&sname="+startName+"&dlat="+endLat+"&dlon="+endLng+"&dname="+endName+"&dev=0&t=2"));
mContext.startActivity(naviIntent);
dialog.dismiss();
});
/*tvTengxun.setOnClickListener(v13 -> {
// 腾讯地图
Intent naviIntent = new Intent("android.intent.action.VIEW", android.net.Uri.parse("qqmap://map/routeplan?type=drive&from=&fromcoord=&to=目的地&tocoord=114.347061,34.815321&policy=0&referer=appName"));
mContext.startActivity(naviIntent);
dialog.dismiss();
});*/
tvCancledialog.setOnClickListener(v14 -> dialog.dismiss());
});
}
}
我们提供了startDialog()的方法,需要传入开始坐标、和结束坐标、起始名称和目的地名称。然后根据手机端获取当前手机端安装的地图软件
/**
* 获取指定包名的应用是否安装
* @param mContext
* @param packagename
* @return
*/
public static boolean isPackageInstalled(Context mContext, String packagename) {
PackageInfo packageInfo = null;
try {
packageInfo = mContext.getPackageManager().getPackageInfo(packagename, 0);
} catch (PackageManager.NameNotFoundException e) {
packageInfo = null;
e.printStackTrace();
} finally {
return packageInfo == null ? false : true;
}
}
调起api的方法
①高德地图:
Intent naviIntent = new Intent("android.intent.action.VIEW", android.net.Uri.parse("androidamap://route?sourceApplication=appName&slat="+startLat+"&slon="+startLng+"&sname="+startName+"&dlat="+endLat+"&dlon="+endLng+"&dname="+endName+"&dev=0&t=2"));
② 百度地图: 可以修改mode=driving 来指定导航的方式是驾车还是步行。
transit(公交)、
driving(驾车)、
walking(步行)和riding(骑行)
还有其他详情可参考 [https://lbsyun.baidu.com/index.php?title=uri/api/android]
Intent naviIntent = new Intent("android.intent.action.VIEW", android.net.Uri.parse("baidumap://map/direction?origin=name:"+startName+"|latlng:"+start[1]+","+start[0]+"&destination=latlng:"+end[1]+","+end[0]+"|name:"+endName+"&mode=driving"));
③ 腾讯地图 type 参数为导航模式type=drive
Intent naviIntent = new Intent("android.intent.action.VIEW", android.net.Uri.parse("qqmap://map/routeplan?type=drive&from=&fromcoord=&to=目的地&tocoord=114.347061,34.815321&policy=0&referer=appName"));
文章浏览阅读1.5k次。Binary String Matching时间限制:3000 ms | 内存限制:65535 KB难度:3描述Given two strings A and B, whose alphabet consist only ‘0’ and ‘1’. Your task is only to tell how many times does A appear as a substring of B..._nyoj5串匹配
文章浏览阅读1.4k次。基于基站定位数据的商圈分析数据抽取以2014-1-1开始到2014-6-30结束时间作为分析窗口数据分析以55555这个人为例,判断其活动位置,基站号改变,说明其进入下一个区域,分析出2014-1-1下午零时53分进入36902基站,直到二时13分才进入36907基站,说明他在36902基站呆了80分钟数据预处理首先,去掉无用的属性,例如什么信令类型,LOC编号这些的,只留下日期,时间..._基于基站定位数据的商圈分析 scala
文章浏览阅读2.2k次,点赞3次,收藏2次。本文翻译自:https://blog.securelayer7.net/owasp-top-10-penetration-testing-soap-application-mitigation/SOAP概述简单对象访问协议(SOAP)是连接或Web服务或客户端和Web服务之间的接口。SOAP通过应用层协议(如HTTP,SMTP或甚至TCP)进行操作,用于消息传输。图1 SOAP操..._available soap services 漏洞
文章浏览阅读407次,点赞5次,收藏8次。标准号:GB/T 33171-2016中文标准名称:城市交通运行状况评价规范 英文标准名称:Specification for urban traffic performance evaluation_城市交通运行状况评价规范 下载
文章浏览阅读7.3k次,点赞8次,收藏48次。https://blog.csdn.net/shanpenghui/article/details/117282535https://blog.csdn.net/weixin_37532614/article/details/109602947https://blog.csdn.net/weixin_41010198/article/details/117042386_ros2的rosbag可以用ros1播放么
文章浏览阅读978次。Python报错:RuntimeError: one of the variables needed for gradient computation has been modified by_python runtimeerror: one of the variables needed for gradient computation ha
文章浏览阅读1.1w次,点赞20次,收藏167次。前言0x01 搜索问题的形式化0x02 树搜索和图搜索0x03 搜索算法的评估0x04 盲目搜索算法0x04.01 宽度优先搜索算法BFS0x04.02 一致代价搜索算法UCS0x04.03 深度优先搜索算法DFS前言搜索问题是在解决各类问题时不可避免的重点难点,很多问题的求解过程都可以转变为搜索问题。比如,对于以下罗马尼亚问题,希望找到一条路径使得从城市 Arad 到城市 Bucuresti 的路径最短,这就是一个经典的搜索问题,在数据结构课程中,我们都知道使用 Dijkstra 算法来求得最优解,._搜索算法
文章浏览阅读922次。部署环境名称类型服务器华为云鲲鹏服务器系统版本CentOS 7.6 64bit with ARM安装gogs安装gityum install git -y下载gogs的armv8版本 gogs_0.12.3_linux_armv8.tar.gz 上传到服务器上解压gogs_0.12.3_linux_armv8.tar.gztar -zxvf gogs_0.12.3_linux_armv8.tar.gz进入到对应目录cd gogs后台_kunpeng golang镜像
文章浏览阅读4.8k次,点赞9次,收藏24次。今天见到了传说中的打表法,有人说这是流氓算法,但是我觉得这个也是非常牛逼的。下面就来说说这个打表法把,打表法对于某些用时较长的题目非常的有用。就是将我们要的结果打印到一个文本文档中,然后直接调用这个结果就可以了。在编译的时候就不用再程序里面计算,这样就省了很多时间,。是不是非常的牛逼呢,哈哈程序如下;#include<iostream>#include<..._打表法
文章浏览阅读2.3k次,点赞2次,收藏11次。通过实现IRule接口可以自定义负载策略,主要的选择服务逻辑在 choose 方法中。}_ribbon原理
文章浏览阅读6.1k次,点赞6次,收藏16次。以下描述了如何在Centos服务器上安装GPU版本的lammps。安装环境目标属性系统Linux/CentOS 7.6CPU12*Intel Xeon CPU E5-2609 v3 @ 1.90GHzGPU2*NVIDIA Tesla K80/CUDA 8.0安装准备1. CUDA由于是安装GPU版本lammps,首先应确保系统安装有显卡所对..._centos lammps gpu
文章浏览阅读2.9k次,点赞4次,收藏32次。目录什么是API?什么是API测试API测试的测试用例:API测试方法:如何进行API测试API测试的最佳做法:API测试检测到的错误类型API测试工具API测试的挑战结论:最后什么是API?API(全称Application Programming Interface)是两个单独的软件系统之间的通信和数据交换。实现API的软件系统包含可以由另一个软件系统执行的功能/子例程。什么是API测试API测试是一种用于验证API(应用程序编程接口)的._能直接温hr是不是刷api的吗