Android仿微信调用第三方地图应用导航(高德、百度、腾讯)
程序员文章站
2023-12-02 18:17:22
实现目标
先来一张微信功能截图看看要做什么
其实就是有一个目的地,点击目的地的时候弹出可选择的应用进行导航。
大脑动一下,要实现这个功能应该大体分成两步...
实现目标
先来一张微信功能截图看看要做什么
其实就是有一个目的地,点击目的地的时候弹出可选择的应用进行导航。
大脑动一下,要实现这个功能应该大体分成两步:
- 底部弹出可选的地图菜单进行展示
- 点击具体菜单某一项的时候调用对应地图的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
这个每个地图的官网都会有介绍,你只需要把目的地名称,经纬度信息传过去就好了,没什么多说的,直接贴代码。
@override public 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的方式传入data uri 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的方式传入data uri 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; } }
效果图
贴一下效果图
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
上一篇: cdr简单制作漂亮的立体字教程