关于高德地图问题总结 (七)调起本地地图导航_android fragment调用高德地图-程序员宅基地

技术标签: 唤起第三方地图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"));
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_34096265/article/details/115615006

智能推荐

nyoj5 Binary String Matching 查子串个数 strstr函数模板题_nyoj5串匹配-程序员宅基地

文章浏览阅读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串匹配

《数据分析与挖掘 第十四章 基于基站定位数据的商圈分析》_基于基站定位数据的商圈分析 scala-程序员宅基地

文章浏览阅读1.4k次。基于基站定位数据的商圈分析数据抽取以2014-1-1开始到2014-6-30结束时间作为分析窗口数据分析以55555这个人为例,判断其活动位置,基站号改变,说明其进入下一个区域,分析出2014-1-1下午零时53分进入36902基站,直到二时13分才进入36907基站,说明他在36902基站呆了80分钟数据预处理首先,去掉无用的属性,例如什么信令类型,LOC编号这些的,只留下日期,时间..._基于基站定位数据的商圈分析 scala

【技术分享】针对SOAP的渗透测试与防护_available soap services 漏洞-程序员宅基地

文章浏览阅读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 漏洞

GB∕T 33171-2016 城市交通运行状况评价规范_城市交通运行状况评价规范 下载-程序员宅基地

文章浏览阅读407次,点赞5次,收藏8次。标准号:GB/T 33171-2016中文标准名称:城市交通运行状况评价规范 英文标准名称:Specification for urban traffic performance evaluation_城市交通运行状况评价规范 下载

ROS1与ROS2的bag包互换(包含自定义消息)_ros2的rosbag可以用ros1播放么-程序员宅基地

文章浏览阅读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播放么

Python报错:RuntimeError: one of the variables needed for gradient computation has been modified by_python runtimeerror: one of the variables needed f-程序员宅基地

文章浏览阅读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 算法来求得最优解,._搜索算法

华为云鲲鹏服务器安装gogs_kunpeng golang镜像-程序员宅基地

文章浏览阅读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<..._打表法

Ribbon实战与原理剖析_ribbon原理-程序员宅基地

文章浏览阅读2.3k次,点赞2次,收藏11次。通过实现IRule接口可以自定义负载策略,主要的选择服务逻辑在 choose 方法中。}_ribbon原理

Centos 安装GPU并行lammps_centos lammps gpu-程序员宅基地

文章浏览阅读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

小米HR:说说对API有多少的理解? 看了后,和面试官扯皮,吹牛逼!绰绰有余!_能直接温hr是不是刷api的吗-程序员宅基地

文章浏览阅读2.9k次,点赞4次,收藏32次。目录什么是API?什么是API测试API测试的测试用例:API测试方法:如何进行API测试API测试的最佳做法:API测试检测到的错误类型API测试工具API测试的挑战结论:最后什么是API?API(全称Application Programming Interface)是两个单独的软件系统之间的通信和数据交换。实现API的软件系统包含可以由另一个软件系统执行的功能/子例程。什么是API测试API测试是一种用于验证API(应用程序编程接口)的._能直接温hr是不是刷api的吗

推荐文章

热门文章

相关标签