Android仿微信调用第三方地图应用导航(高德、百度、腾讯)
好久没有写Andorid代码啦!最近刚好要实现一个这个功能,顺便就在博客里分享一下。
实现目标
先来一张微信功能截图看看要做什么
其实就是有一个目的地,点击目的地的时候弹出可选择的应用进行导航。
大脑动一下,要实现这个功能应该大体分成两步:
- 底部弹出可选的地图菜单进行展示
- 点击具体菜单某一项的时候调用对应地图的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仿微信调用第三方地图应用导航(高德、百度、腾讯)相关推荐
- Android仿高德地图app,Android仿微信调用第三方地图应用导航(高德、百度、腾讯)...
好久没有写Andorid代码啦!最近刚好要实现一个这个功能,顺便就在博客里分享一下. 实现目标 先来一张微信功能截图看看要做什么 其实就是有一个目的地,点击目的地的时候弹出可选择的应用进行导航. 大脑 ...
- 调用第三方地图app导航(高德、百度、腾讯)
当前位置导航到某个地方,还可以设置出发地的经纬度和位置信息,具体看各官网参数设置. 以下代码可以直接使用. /*** Date: 2022-11-23* Author: lanzi* 调用第三方地图a ...
- iOS之Swift实现调用第三方地图应用导航
iOS之Swift实现调用第三方地图应用导航 开始的一些话 关于坐标系 源码 调用方法 一点注意事项 开始的一些话 作为一个"半路出家"的iOS的程序猿,一直使用OC开发,也想过使 ...
- Android 调用第三方地图进行导航
前言 最近项目中需要实现定位导航到某个目的地去.看网上说有人集成了某些平台的sdk进行导航操作.其实可以不用集成sdk文档(只是针对要导航到xx地方去的业务需求,只需要知道当前位置和目的地的坐标即可. ...
- IOS 调用第三方地图APP导航
在开发中调用第三方APP进行路径规划,在此过程中不需要导入所调用地图的SDK,本文中只介绍调用百度地图.高德地图以及苹果自身地图APP. 在本项目中我用的是百度地图编码获取的百度经纬度坐标,而在开发过 ...
- 微信公众号h5实现高德/百度/腾讯地图导航
最近做了个微信公众号h5需求是这样的 1.点击地图进入地图详情 2.地图详情包括开始导航与地图(高德,百度,腾讯)选择,点击开始导航自动跳转该地图app 首先先理一下功能: 1:第一张图是直接显示坐标 ...
- android app调用第三方地图路线规划导航(百度,高德,腾讯)
android app调用第三方地图路线规划导航(百度,高德,腾讯) 因为直接使用高德的sdk提供的导航被投诉说不准,所以需要接第三方. 把BAT系的地图都接上了,有兄弟找到其他的地图调用方法告诉下小 ...
- php仿微信底部菜单,Android实现简单底部导航栏 Android仿微信滑动切换效果
Android仿微信滑动切换最终实现效果: 大体思路: 1. 主要使用两个自定义View配合实现; 底部图标加文字为一个自定义view,底部导航栏为一个载体,根据需要来添加底部图标; 2. 底部导航栏 ...
- android仿微信的activity平滑水平切换动画,Android实现简单底部导航栏 Android仿微信滑动切换效果...
Android实现简单底部导航栏 Android仿微信滑动切换效果 发布时间:2020-10-09 19:48:00 来源:脚本之家 阅读:96 作者:丶白泽 Android仿微信滑动切换最终实现效果 ...
最新文章
- C - Group HDU - 4638[离线+树状数组]
- python对于图片的风格的处理--引用github上开源项目的
- 华为鸿蒙官方翻译_鸿蒙系统官方译名来了?华为在欧盟注册Harmony商标
- js获取浏览器语言(ie、ff、chrome)、contextpath
- 静态主席树总结(静态区间的k大)
- 【转载】 C#使用string.IsNullOrWhiteSpace方法判断字符串是否为非空字符
- 总结:PHP值得注意的几个问题
- 这个好,精英们的自由时间都用来干嘛?
- ELK下Kibana的使用
- C#用正则表达式 获取网页源代码标签的属性或值
- Error:(292, 40) java: -source 1.5 中不支持 diamond 运算符 (请使用 -source 7 或更高版本以启用 diamond 运算符) ........
- cms免费建立java官网,免费开源cms
- 生活中的货币时间价值 网课答案
- 摊牌了,做为前端,我经常在用的15个国外网站
- 运动会分数统计 java语言
- 中国最美丽的地方排行榜国家地理
- JavaGUI编程 -- 窗口监听事件和键盘监听事件(AWT)
- windows下更改Apache以fastcgi方式运行php
- 同网段能互通,跨网段不通
- ▶链路层第三弹◀ 两种信道下的数据链路层【下】广播通信CSMA/CD
热门文章
- shall的过去式和should怎么区分
- 【产业互联网周报】阿里巴巴132亿元再建云计算中心;腾讯回应“QQ扫描读取所有浏览器的历史记录”;IBM中国研究院全面关闭...
- 2022年我应该怎么学习SAP?下篇
- excel二级联动制作
- Wasmer 3.0 发布,可在浏览器外运行 WebAssembly
- 局域网lan设置是干嘛的?
- Origin2017缩放图形的同时如何保持图中的其它元素大小不变?
- 一台计算机里有多少个芯片,一台电脑里有多少个风扇啊
- Tomcat8源码分析系列-启动分析(四) webapp
- php 单选默认,html单选按钮默认选中怎么做?input标签的单选按钮用法实例