Android 地图导航调用百度地图、高德地图、腾讯地图,7天拿到阿里安卓岗位offer

double theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * Math.PI);

double lng = z * Math.cos(theta);

double lat = z * Math.sin(theta);

return new LatLng(lat, lng);

}

/**

  • GCJ-02 坐标转换成 BD-09 坐标

*/

public static LatLng GCJ2BD(LatLng bd) {

double x = bd.longitude, y = bd.latitude;

double z = Math.sqrt(x * x + y * y) + 0.00002 * Math.sin(y * Math.PI);

double theta = Math.atan2(y, x) + 0.000003 * Math.cos(x * Math.PI);

double tempLon = z * Math.cos(theta) + 0.0065;

double tempLat = z * Math.sin(theta) + 0.006;

return new LatLng(tempLat, tempLon);

}

业务需求

===============================================================

还是简单描述一下业务需求,点击一个地址或者按钮或者地图上的一个点,弹窗选择第三方地图导航,点击选择后调用第三方地图进行导航。

1,点击按钮弹窗选择

=====================================================================

@OnClick({R.id.tv_navigation})

public void onViewClicked(View view) {

switch (view.getId()) {

case R.id.tv_navigation:

showMapList();

break;

}

}

2,弹窗

===============================================================

private void showMapList() {

final String[] mapNames = {“百度地图”, “高德地图”, “腾讯地图”};

final String[] packageNames = {“com.baidu.BaiduMap”, “com.autonavi.minimap”, “com.tencent.map”};

AlertDialog.Builder builder = new AlertDialog.Builder(this)

.setTitle(“请选择地图”)

.setItems(mapNames, (dialogInterface, i) -> {

boolean installed = isInstalled(packageNames[i]);

if (installed) {

switch (i) {

case 0:

gotoBaiDuMap();

break;

case 1:

gotoGaoDeMap();

break;

case 2:

gotoTencentMap();

break;

}

} else {

ToastUtil.showCenterToast(mapNames[i] + “未安装”);

}

});

builder.create().show();

}

调用之前判断一下是否安装:

/**

  • 检测所选地图是否安装

*/

private boolean isInstalled(String packageName) {

PackageManager manager = this.getPackageManager();

List installedPackages = manager.getInstalledPackages(0);

if (installedPackages != null) {

for (PackageInfo info : installedPackages) {

if (info.packageName.equals(packageName))

return true;

}

}

return false;

}

3,调用地图

=================================================================

别忘了 申请权限。

百度地图

  • 参数说明:

在这里插入图片描述

参数以字符串拼接的方式即可,这里用StringBuffer拼接,比String易读些。

  • 调用示例:

private void gotoBaiDuMap() {

// 驾车导航

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级安卓工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Android移动开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Android)
img

文末

我总结了一些Android核心知识点,以及一些最新的大厂面试题、知识脑图和视频资料解析。

需要的小伙伴私信【学习】我免费分享给你,以后的路也希望我们能一起走下去。(谢谢大家一直以来的支持,需要的自己领取)

直接点击链接也可以领取哦!

Android学习PDF+架构视频+面试文档+源码笔记

部分资料一览:

  • 330页PDF Android学习核心笔记(内含8大板块)

  • Android学习的系统对应视频

  • Android进阶的系统对应学习资料

  • Android BAT大厂面试题(有解析)

  • 330页PDF Android学习核心笔记(内含8大板块)

[外链图片转存中…(img-Acw4MAZL-1711295930820)]

[外链图片转存中…(img-FLSqLCws-1711295930820)]

  • Android学习的系统对应视频

  • Android进阶的系统对应学习资料

[外链图片转存中…(img-2Zdne2zE-1711295930821)]

  • Android BAT大厂面试题(有解析)

View.OnClickListener onClickListener=new View.OnClickListener() { @Override public void onClick(View view) { switch (view.getId()) { case R.id.baidu_btn: if (MDMUtil.appIsInstalled( getContext(),"com.baidu.BaiduMap")) {//传入指定应用包名 try { double[] gd_lat_lon ; if(RoutingXModel.isGpslatlon){ gd_lat_lon= gaoDeToBaidu(xModel.poc_lon,xModel.poc_lat); }else{ gd_lat_lon= new double[2]; gd_lat_lon[0]=xModel.poc_lon; gd_lat_lon[1]=xModel.poc_lat; } Intent intent = Intent.getIntent("intent://map/direction?" + "destination=latlng:" + gd_lat_lon[1] + "," + gd_lat_lon[0]+ "|name:我的目的地" + //终点 "&mode=driving&" + //导航路线方式 "&src=appname#Intent;scheme=bdapp;package=com.baidu.BaiduMap;end"); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); getContext().startActivity(intent); //启动调用 } catch (URISyntaxException e) { Log.e("intent", e.getMessage()); } } else {//未安装 //market为路径,id为包名 //显示手机上所有的market商店 Toast.makeText(getContext(), "您尚未安装百度地图", 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(getContext().getPackageManager()) != null){ getContext().startActivity(intent); } } dismiss(); break; case R.id.gaode_btn: if (MDMUtil.appIsInstalled( getContext(),"com.autonavi.minimap")) { Intent intent = new Intent(); intent.setAction(Intent.ACTION_VIEW); intent.addCategory(Intent.CATEGORY_DEFAULT); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); double[] gd_lat_lon ; if(!RoutingXModel.isGpslatlon){ gd_lat_lon= bdToGaoDe(xModel.poc_lat,xModel.poc_lon); }else{ gd_lat_lon= new double[2]; gd_lat_lon[0]=xModel.poc_lon; gd_lat_lon[1]=xModel.poc_lat; } //将功能Scheme以URI的方式传入data Uri uri = Uri.parse("androidamap://navi?sourceApplication=appname&poiname=fangheng⪫=" + gd_lat_lon[1] + "&lon;=" + gd_lat_lon[0] + "&dev=0&style=4"); intent.setData(uri); //启动该页面即可 getContext().startActivity(intent); } else { Toast.makeText(getContext(), "您尚未安装高德地图", 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(getContext().getPackageManager()) != null){ getContext().startActivity(intent); } } dismiss(); break; case R.id.tencent_btn: Intent intent = new Intent(); intent.setAction(Intent.ACTION_VIEW); intent.addCategory(Intent.CATEGORY_DEFAULT); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); double[] gd_lat_lon ; if(!RoutingXModel.isGpslatlon){ gd_lat_lon= bdToGaoDe(xModel.poc_lat,xModel.poc_lon); }else{ gd_lat_lon= new double[2]; gd_lat_lon[0]=xModel.poc_lon; gd_lat_lon[1]=xModel.poc_lat; } //将功能Scheme以URI的方式传入data Uri uri = Uri.parse("qqmap://map/routeplan?type=drive&to;=我的目的地&tocoord;=" + gd_lat_lon[1]+ "," + gd_lat_lon[0]); intent.setData(uri); if (intent.resolveActivity(getContext().getPackageManager()) != null) { //启动该页面即可 getContext().startActivity(intent); } else { Toast.makeText(getContext(), "您尚未安装腾讯地图", Toast.LENGTH_LONG).show(); } dismiss(); break; case R.id.cancel_btn2: dismiss(); break; } } };
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值