好久没有写Andorid代码啦!最近刚好要实现一个这个功能,顺便就在博客里分享一下。

实现目标

先来一张微信功能截图看看要做什么

其实就是有一个目的地,点击目的地的时候弹出可选择的应用进行导航。

大脑动一下,要实现这个功能应该大体分成两步:

  1. 底部弹出可选的地图菜单进行展示
  2. 点击具体菜单某一项的时候调用对应地图的api进行导航就ok啦

底部菜单这里用PopupWindow来做。

实现

1、菜单显示
PopupWindow支持传入view进行弹出展示,所有我们直接写一个菜单布局,高德、百度、腾讯 再加一个取消。

map_navagation_sheet.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="vertical"><Button
            android:id="@+id/baidu_btn"android:layout_width="match_parent"android:layout_height="wrap_content"android:background="@drawable/ulz_white_selector"android:text="百度地图"/><include layout="@layout/common_line_view"/><Button
            android:id="@+id/gaode_btn"android:layout_width="match_parent"android:layout_height="wrap_content"android:background="@drawable/ulz_white_selector"android:text="高德地图"/><include layout="@layout/common_line_view"/><Button
        android:id="@+id/tencent_btn"android:layout_width="match_parent"android:layout_height="wrap_content"android:background="@drawable/ulz_white_selector"android:text="腾讯地图"/><include layout="@layout/common_line_view"/><Button
            android:id="@+id/cancel_btn2"android:layout_width="match_parent"android:layout_height="wrap_content"android:background="@drawable/ulz_white_selector"android:text="取消"/>
</LinearLayout>

这里为了显示效果,自己写了个PopupWindow的子类,一般你直接用PopupWindow就可以了。

然后在需要调用的地方显示PopupWindow


mapSheetView = LayoutInflater.from(this).inflate(R.layout.map_navagation_sheet, null);mBottomSheetPop = new BottomSheetPop(this);mBottomSheetPop.setWidth(ViewGroup.LayoutParams.MATCH_PARENT);mBottomSheetPop.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT);mBottomSheetPop.setContentView(mapSheetView);mBottomSheetPop.setBackgroundDrawable(new ColorDrawable(0x00000000));mBottomSheetPop.setOutsideTouchable(true);mBottomSheetPop.setFocusable(true);mBottomSheetPop.showAtLocation(this.getWindow().getDecorView(), Gravity.BOTTOM, 0, 0);

2、点击每个菜单调用对用地图的导航api
这个每个地图的官网都会有介绍,你只需要把目的地名称,经纬度信息传过去就好了,没什么多说的,直接贴代码。

@Overridepublic void onClick(View view) {switch (view.getId()) {case R.id.navigation_btn:mBottomSheetPop = new BottomSheetPop(this);mBottomSheetPop.setWidth(ViewGroup.LayoutParams.MATCH_PARENT);mBottomSheetPop.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT);mBottomSheetPop.setContentView(mapSheetView);mBottomSheetPop.setBackgroundDrawable(new ColorDrawable(0x00000000));mBottomSheetPop.setOutsideTouchable(true);mBottomSheetPop.setFocusable(true);mBottomSheetPop.showAtLocation(this.getWindow().getDecorView(), Gravity.BOTTOM, 0, 0);break;case R.id.cancel_btn2:if (mBottomSheetPop != null) {mBottomSheetPop.dismiss();}break;case R.id.baidu_btn:if (isAvilible(this, "com.baidu.BaiduMap")) {//传入指定应用包名try {Intent intent = Intent.getIntent("intent://map/direction?" +"destination=latlng:" + mInfo.getLat() + "," + mInfo.getLng() + "|name:我的目的地" +        //终点"&mode=driving&" +          //导航路线方式"&src=appname#Intent;scheme=bdapp;package=com.baidu.BaiduMap;end");startActivity(intent); //启动调用} catch (URISyntaxException e) {Log.e("intent", e.getMessage());}} else {//未安装//market为路径,id为包名//显示手机上所有的market商店Toast.makeText(this, "您尚未安装百度地图", Toast.LENGTH_LONG).show();Uri uri = Uri.parse("market://details?id=com.baidu.BaiduMap");Intent intent = new Intent(Intent.ACTION_VIEW, uri);if (intent.resolveActivity(getPackageManager()) != null){startActivity(intent);}}mBottomSheetPop.dismiss();break;case R.id.gaode_btn:if (isAvilible(this, "com.autonavi.minimap")) {Intent intent = new Intent();intent.setAction(Intent.ACTION_VIEW);intent.addCategory(Intent.CATEGORY_DEFAULT);//将功能Scheme以URI的方式传入dataUri uri = Uri.parse("androidamap://navi?sourceApplication=appname&poiname=fangheng&lat=" + mInfo.getLat() + "&lon=" + mInfo.getLng() + "&dev=1&style=2");intent.setData(uri);//启动该页面即可startActivity(intent);} else {Toast.makeText(this, "您尚未安装高德地图", Toast.LENGTH_LONG).show();Uri uri = Uri.parse("market://details?id=com.autonavi.minimap");Intent intent = new Intent(Intent.ACTION_VIEW, uri);if (intent.resolveActivity(getPackageManager()) != null){startActivity(intent);}}mBottomSheetPop.dismiss();break;case R.id.tencent_btn:Intent intent = new Intent();intent.setAction(Intent.ACTION_VIEW);intent.addCategory(Intent.CATEGORY_DEFAULT);//将功能Scheme以URI的方式传入dataUri uri = Uri.parse("qqmap://map/routeplan?type=drive&to=我的目的地&tocoord=" + mInfo.getLat() + "," + mInfo.getLng());intent.setData(uri);if (intent.resolveActivity(getPackageManager()) != null) {//启动该页面即可startActivity(intent);} else {Toast.makeText(this, "您尚未安装腾讯地图", Toast.LENGTH_LONG).show();}mBottomSheetPop.dismiss();break;}}

效果图

贴一下效果图

代码下载

效果演示apk下载

源码下载

Android仿微信调用第三方地图应用导航(高德、百度、腾讯)相关推荐

  1. Android仿高德地图app,Android仿微信调用第三方地图应用导航(高德、百度、腾讯)...

    好久没有写Andorid代码啦!最近刚好要实现一个这个功能,顺便就在博客里分享一下. 实现目标 先来一张微信功能截图看看要做什么 其实就是有一个目的地,点击目的地的时候弹出可选择的应用进行导航. 大脑 ...

  2. 调用第三方地图app导航(高德、百度、腾讯)

    当前位置导航到某个地方,还可以设置出发地的经纬度和位置信息,具体看各官网参数设置. 以下代码可以直接使用. /*** Date: 2022-11-23* Author: lanzi* 调用第三方地图a ...

  3. iOS之Swift实现调用第三方地图应用导航

    iOS之Swift实现调用第三方地图应用导航 开始的一些话 关于坐标系 源码 调用方法 一点注意事项 开始的一些话 作为一个"半路出家"的iOS的程序猿,一直使用OC开发,也想过使 ...

  4. Android 调用第三方地图进行导航

    前言 最近项目中需要实现定位导航到某个目的地去.看网上说有人集成了某些平台的sdk进行导航操作.其实可以不用集成sdk文档(只是针对要导航到xx地方去的业务需求,只需要知道当前位置和目的地的坐标即可. ...

  5. IOS 调用第三方地图APP导航

    在开发中调用第三方APP进行路径规划,在此过程中不需要导入所调用地图的SDK,本文中只介绍调用百度地图.高德地图以及苹果自身地图APP. 在本项目中我用的是百度地图编码获取的百度经纬度坐标,而在开发过 ...

  6. 微信公众号h5实现高德/百度/腾讯地图导航

    最近做了个微信公众号h5需求是这样的 1.点击地图进入地图详情 2.地图详情包括开始导航与地图(高德,百度,腾讯)选择,点击开始导航自动跳转该地图app 首先先理一下功能: 1:第一张图是直接显示坐标 ...

  7. android app调用第三方地图路线规划导航(百度,高德,腾讯)

    android app调用第三方地图路线规划导航(百度,高德,腾讯) 因为直接使用高德的sdk提供的导航被投诉说不准,所以需要接第三方. 把BAT系的地图都接上了,有兄弟找到其他的地图调用方法告诉下小 ...

  8. php仿微信底部菜单,Android实现简单底部导航栏 Android仿微信滑动切换效果

    Android仿微信滑动切换最终实现效果: 大体思路: 1. 主要使用两个自定义View配合实现; 底部图标加文字为一个自定义view,底部导航栏为一个载体,根据需要来添加底部图标; 2. 底部导航栏 ...

  9. android仿微信的activity平滑水平切换动画,Android实现简单底部导航栏 Android仿微信滑动切换效果...

    Android实现简单底部导航栏 Android仿微信滑动切换效果 发布时间:2020-10-09 19:48:00 来源:脚本之家 阅读:96 作者:丶白泽 Android仿微信滑动切换最终实现效果 ...

最新文章

  1. C - Group HDU - 4638[离线+树状数组]
  2. python对于图片的风格的处理--引用github上开源项目的
  3. 华为鸿蒙官方翻译_鸿蒙系统官方译名来了?华为在欧盟注册Harmony商标
  4. js获取浏览器语言(ie、ff、chrome)、contextpath
  5. 静态主席树总结(静态区间的k大)
  6. 【转载】 C#使用string.IsNullOrWhiteSpace方法判断字符串是否为非空字符
  7. 总结:PHP值得注意的几个问题
  8. 这个好,精英们的自由时间都用来干嘛?
  9. ELK下Kibana的使用
  10. C#用正则表达式 获取网页源代码标签的属性或值
  11. Error:(292, 40) java: -source 1.5 中不支持 diamond 运算符 (请使用 -source 7 或更高版本以启用 diamond 运算符) ........
  12. cms免费建立java官网,免费开源cms
  13. 生活中的货币时间价值 网课答案
  14. 摊牌了,做为前端,我经常在用的15个国外网站
  15. 运动会分数统计 java语言
  16. 中国最美丽的地方排行榜国家地理
  17. JavaGUI编程 -- 窗口监听事件和键盘监听事件(AWT)
  18. windows下更改Apache以fastcgi方式运行php
  19. 同网段能互通,跨网段不通
  20. ▶链路层第三弹◀ 两种信道下的数据链路层【下】广播通信CSMA/CD

热门文章

  1. shall的过去式和should怎么区分
  2. 【产业互联网周报】阿里巴巴132亿元再建云计算中心;腾讯回应“QQ扫描读取所有浏览器的历史记录”;IBM中国研究院全面关闭...
  3. 2022年我应该怎么学习SAP?下篇
  4. excel二级联动制作
  5. Wasmer 3.0 发布,可在浏览器外运行 WebAssembly
  6. 局域网lan设置是干嘛的?
  7. Origin2017缩放图形的同时如何保持图中的其它元素大小不变?
  8. 一台计算机里有多少个芯片,一台电脑里有多少个风扇啊
  9. Tomcat8源码分析系列-启动分析(四) webapp
  10. php 单选默认,html单选按钮默认选中怎么做?input标签的单选按钮用法实例