直接上效果图:

2019-10-17 18:20:16.079 12664-12664/com.example.baidumapdemo I/location: 地址为====四川省宜宾市长宁县Y026 滩子塆 长宁畅通机动车检测有限公司 山水淯江 桂坪村 坪上 长宁县长宁镇海水村村民委员会 三里半烟花爆竹五金销售点 宜宾市 长宁县
2019-10-17 18:20:16.684 12664-12664/com.example.baidumapdemo I/location: address.getLocality()==宜宾市
2019-10-17 18:20:16.684 12664-12664/com.example.baidumapdemo I/location: address.getSubLocality()=2=长宁县
2019-10-17 18:20:16.684 12664-12664/com.example.baidumapdemo I/location: address.getSubLocality()=3=四川省宜宾市长宁县Y026
2019-10-17 18:20:16.698 12664-12664/com.example.baidumapdemo I/location: 经纬度为===Latitude:28.546816758039256Longitude:104.91863304511612
2019-10-17 18:20:16.699 12664-12664/com.example.baidumapdemo I/location: 地址为====四川省宜宾市长宁县Y026 滩子塆 长宁畅通机动车检测有限公司 山水淯江 桂坪村 坪上 长宁县长宁镇海水村村民委员会 三里半烟花爆竹五金销售点 宜宾市 长宁县

主要是实现的功能有:多点标记 并显示你最新的一个点所在的位置信息,滑动时到某个区域显示当前区域的位置信息,当然还有简单的开启app显示当前位置

首先为了感谢老东家 先上一个百度SDK文档的入口-> 文档入口点击这里

ps:那些简单的SDK接入 jar包的解析我这里就不讲 官方文档中的说明很详细 (不要忘记将你的key配置到manifest中)

ok 废话不多说 咱直接开始咯
权限:

    <!-- 访问网络,进行地图相关业务数据请求,包括地图数据,路线规划,POI检索等 --><uses-permission android:name="android.permission.INTERNET" /> <!-- 获取网络状态,根据网络状态切换进行数据请求网络转换 --><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <!-- 读取外置存储。如果开发者使用了so动态加载功能并且把so文件放在了外置存储区域,则需要申请该权限,否则不需要 --><uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <!-- 写外置存储。如果开发者使用了离线地图,并且数据写在外置存储区域,则需要申请该权限 --><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <!-- 这个权限用于进行网络定位 --><uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <!-- 这个权限用于访问GPS定位 --><uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

2.主活动中:
详细说明2个方法
1.对于当前点击坐标的位置打印以及详细的位置信息提示框

   private void updateWithNewLocation(LatLng latLng) {//移动到具体的位置String coordinate;String addressStr = "no address \n";if (latLng != null) {beiwei = latLng.latitude - 0.004;dongjing = latLng.longitude - 0.01;//double lat = 39.25631486;//double lng = 115.63478961;coordinate = "Latitude:" + beiwei + "\nLongitude:" + dongjing;Geocoder geocoder = new Geocoder(this, Locale.getDefault());try {List<Address> addresses = geocoder.getFromLocation(beiwei,dongjing, 1);StringBuilder sb = new StringBuilder();if (addresses.size() > 0) {Address address = addresses.get(0);for (int i = 0; i < address.getMaxAddressLineIndex(); i++) {sb.append(address.getAddressLine(i)).append(" ");}/*sb.append(address.getCountryName());Log.i("location", "address.getCountryName()==" + address.getCountryName());//国家名*/sb.append(address.getLocality()).append(" ");Log.i("location", "address.getLocality()==" + address.getLocality());//城市名sb.append(address.getSubLocality());Log.i("location", "address.getSubLocality()=2=" + address.getSubLocality());//---区名addressStr = sb.toString();Log.i("location", "address.getSubLocality()=3=" + address.getAddressLine(0) + "");//---区名//用来构造InfoWindow的ButtonButton button = new Button(getApplicationContext());button.setBackgroundResource(R.drawable.duihuakuang);button.setText(address.getAddressLine(0) + "");//构造InfoWindow
//point 描述的位置点
//-100 InfoWindow相对于point在y轴的偏移量InfoWindow   mInfoWindow = new InfoWindow(button, latLng, -50);//使InfoWindow生效mBaiduMap.showInfoWindow(mInfoWindow);//  text_detailedaddress.setText();}} catch (IOException e) {e.printStackTrace();}} else {//如果用户没有允许app访问位置信息 则默认取上海松江经纬度的数据/*lat = 39.25631486;lng = 115.63478961;*/coordinate = "no coordinate!\n";}Log.i("location", "经纬度为===" + coordinate);Log.i("location", "地址为====" + addressStr);//text_detailedaddress.setText(addressStr + "");}

2.点击当前坐标 显示标记

   private void updateMarkMoveTo(LatLng lat) {//指定位置进行标记//定义Maker坐标点LatLng point = new LatLng(lat.latitude, lat.longitude);
//构建Marker图标BitmapDescriptor bitmap = BitmapDescriptorFactory.fromResource(R.drawable.biaoji);
//构建MarkerOption,用于在地图上添加MarkerOverlayOptions option = new MarkerOptions().position(point).icon(bitmap);
//在地图上添加Marker,并显示mBaiduMap.addOverlay(option);}

所有的实现代码


public class MainActivity extends AppCompatActivity {private MapView mMapView;private BaiduMap mBaiduMap;private LocationClient mLocationClient;private double beiwei,dongjing;private boolean isfirstLocate =true;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);SDKInitializer.initialize(getApplicationContext());//SDKInitializer.setCoordType(CoordType.BD09LL);setContentView(R.layout.activity_main);initView();//加载需要的权限initLocation();//主要实现逻辑}private void initLocation() {mMapView = findViewById(R.id.bmapView);//设置缩放的级别
//        MapStatus.Builder builder = new MapStatus.Builder();
//        builder.zoom(18.0f);
//        mBaiduMap.setMapStatus(MapStatusUpdateFactory.newMapStatus(builder.build()));mBaiduMap = mMapView.getMap();//普通地图 ,mBaiduMap是地图控制器对象mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);mBaiduMap.setMyLocationEnabled(true);//开启地图的定位图层//定位初始化mLocationClient = new LocationClient(this);//通过LocationClientOption设置LocationClient相关参数LocationClientOption option = new LocationClientOption();option.setOpenGps(true); // 打开gpsoption.setCoorType("bd09ll"); // 设置坐标类型option.setScanSpan(1000);//设置locationClientOptionmLocationClient.setLocOption(option);//注册LocationListener监听器MyLocationListener myLocationListener = new MyLocationListener();mLocationClient.registerLocationListener(myLocationListener);
//开启地图定位图层mLocationClient.start();//自定义// MyLocationConfiguration myLocationConfiguration = new MyLocationConfiguration(MyLocationConfiguration.LocationMode.FOLLOWING,true,null,0xAAFFFF88,0xAA00FF00);//  mBaiduMap.setMyLocationConfiguration(myLocationConfiguration);mBaiduMap.setIndoorEnable(true);//打开室内图,默认为关闭状态//通过设置enable为true或false 选择是否显示缩放按钮mMapView.showZoomControls(true);UiSettings mUisettings = mBaiduMap.getUiSettings();//通过设置enable为true或false 选择是否启用地图平移mUisettings.setScrollGesturesEnabled(true);//通过设置enable为true或false 选择是否启用地图缩放手势mUisettings.setZoomGesturesEnabled(true);//通过设置enable为true或false 选择是否启用地图俯视功能mUisettings.setOverlookingGesturesEnabled(true);//通过设置enable为true或false 选择是否启用地图旋转功能mUisettings.setRotateGesturesEnabled(true);initClick();}private void initClick() {mBaiduMap.setOnMapStatusChangeListener(new BaiduMap.OnMapStatusChangeListener() {/*** 手势操作地图,设置地图状态等操作导致地图状态开始改变。** @param mapStatus 地图状态改变开始时的地图状态*/@Overridepublic void onMapStatusChangeStart(MapStatus mapStatus) {}/*** 手势操作地图,设置地图状态等操作导致地图状态开始改变。** @param mapStatus 地图状态改变开始时的地图状态** @param i 地图状态改变的原因*///用户手势触发导致的地图状态改变,比如双击、拖拽、滑动底图//int REASON_GESTURE = 1;//SDK导致的地图状态改变, 比如点击缩放控件、指南针图标//int REASON_API_ANIMATION = 2;//开发者调用,导致的地图状态改变//int REASON_DEVELOPER_ANIMATION = 3;@Overridepublic void onMapStatusChangeStart(MapStatus mapStatus, int i) {}/*** 地图状态变化中** @param mapStatus 当前地图状态*/@Overridepublic void onMapStatusChange(MapStatus mapStatus) {}/*** 地图状态改变结束** @param mapStatus 地图状态改变结束后的地图状态*/@Overridepublic void onMapStatusChangeFinish(MapStatus mapStatus) {LatLng latLng = mapStatus.target;updateWithNewLocation(latLng);}});//单击事件BaiduMap.OnMapClickListener listener = new BaiduMap.OnMapClickListener() {/*** 地图单击事件回调函数** @param point 点击的地理坐标*/@Overridepublic void onMapClick(LatLng point) {MapStatusUpdate update = MapStatusUpdateFactory.newLatLng(point);mBaiduMap.animateMapStatus(update);//设置缩放值update = MapStatusUpdateFactory.zoomTo(16f);mBaiduMap.animateMapStatus(update);beiwei = point.latitude - 0.004;dongjing = point.longitude - 0.01;Log.i("danji",beiwei+"@@"+dongjing);updateMarkMoveTo(point);//指定位置进行标记updateWithNewLocation(point);}/*** 地图内 Poi 单击事件回调函数** @param mapPoi 点击的 poi 信息*/@Overridepublic void onMapPoiClick(MapPoi mapPoi) {Log.i("danji",""+mapPoi.getName());Toast.makeText(MainActivity.this,mapPoi.getName(),Toast.LENGTH_SHORT).show();}};
//设置地图单击事件监听mBaiduMap.setOnMapClickListener(listener);}private void updateMarkMoveTo(LatLng lat) {//指定位置进行标记//定义Maker坐标点LatLng point = new LatLng(lat.latitude, lat.longitude);
//构建Marker图标BitmapDescriptor bitmap = BitmapDescriptorFactory.fromResource(R.drawable.biaoji);
//构建MarkerOption,用于在地图上添加MarkerOverlayOptions option = new MarkerOptions().position(point).icon(bitmap);
//在地图上添加Marker,并显示mBaiduMap.addOverlay(option);}private void updateWithNewLocation(LatLng latLng) {//移动到具体的位置String coordinate;String addressStr = "no address \n";if (latLng != null) {beiwei = latLng.latitude - 0.004;dongjing = latLng.longitude - 0.01;//double lat = 39.25631486;//double lng = 115.63478961;coordinate = "Latitude:" + beiwei + "\nLongitude:" + dongjing;Geocoder geocoder = new Geocoder(this, Locale.getDefault());try {List<Address> addresses = geocoder.getFromLocation(beiwei,dongjing, 1);StringBuilder sb = new StringBuilder();if (addresses.size() > 0) {Address address = addresses.get(0);for (int i = 0; i < address.getMaxAddressLineIndex(); i++) {sb.append(address.getAddressLine(i)).append(" ");}/*sb.append(address.getCountryName());Log.i("location", "address.getCountryName()==" + address.getCountryName());//国家名*/sb.append(address.getLocality()).append(" ");Log.i("location", "address.getLocality()==" + address.getLocality());//城市名sb.append(address.getSubLocality());Log.i("location", "address.getSubLocality()=2=" + address.getSubLocality());//---区名addressStr = sb.toString();Log.i("location", "address.getSubLocality()=3=" + address.getAddressLine(0) + "");//---区名//用来构造InfoWindow的ButtonButton button = new Button(getApplicationContext());button.setBackgroundResource(R.drawable.duihuakuang);button.setText(address.getAddressLine(0) + "");//构造InfoWindow
//point 描述的位置点
//-100 InfoWindow相对于point在y轴的偏移量InfoWindow   mInfoWindow = new InfoWindow(button, latLng, -50);//使InfoWindow生效mBaiduMap.showInfoWindow(mInfoWindow);//  text_detailedaddress.setText();}} catch (IOException e) {e.printStackTrace();}} else {//如果用户没有允许app访问位置信息 则默认取上海松江经纬度的数据/*lat = 39.25631486;lng = 115.63478961;*/coordinate = "no coordinate!\n";}Log.i("location", "经纬度为===" + coordinate);Log.i("location", "地址为====" + addressStr);//text_detailedaddress.setText(addressStr + "");}private void initView() {List<String> permission = new ArrayList<>();if(ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE)!= PackageManager.PERMISSION_GRANTED){permission.add(Manifest.permission.READ_EXTERNAL_STORAGE);}if(ContextCompat.checkSelfPermission(MainActivity.this,Manifest.permission.WRITE_EXTERNAL_STORAGE)!=PackageManager.PERMISSION_GRANTED){permission.add(Manifest.permission.WRITE_EXTERNAL_STORAGE);}if(ContextCompat.checkSelfPermission(MainActivity.this,Manifest.permission.ACCESS_COARSE_LOCATION)!=PackageManager.PERMISSION_GRANTED){permission.add(Manifest.permission.ACCESS_COARSE_LOCATION);}if(ContextCompat.checkSelfPermission(MainActivity.this,Manifest.permission.ACCESS_FINE_LOCATION)!=PackageManager.PERMISSION_GRANTED){permission.add(Manifest.permission.ACCESS_FINE_LOCATION);if(!permission.isEmpty()){String[] permissions = permission.toArray(new String[permission.size()]);ActivityCompat.requestPermissions(MainActivity.this,permissions,1);//发起权限}else {initLocation();}}}@Overrideprotected void onResume() {mMapView.onResume();super.onResume();}@Overrideprotected void onPause() {mMapView.onPause();super.onPause();}@Overrideprotected void onDestroy() {mLocationClient.stop();mBaiduMap.setMyLocationEnabled(false);mMapView.onDestroy();mMapView = null;super.onDestroy();}//构造地图数据// 我们通过继承抽象类BDAbstractListener并重写其onReceieveLocation方法来获取定位数据,并将其传给MapView。public class MyLocationListener extends BDAbstractLocationListener {@Overridepublic void onReceiveLocation(BDLocation location) {//mapView 销毁后不在处理新接收的位置if (location == null || mMapView == null){return;}beiwei = location.getLatitude();dongjing  = location.getLongitude();navagitto(location);//移动到指定位置MyLocationData locData = new MyLocationData.Builder()//小圆点哦.accuracy(location.getRadius())// 此处设置开发者获取到的方向信息,顺时针0-360.direction(location.getDirection()).latitude(location.getLatitude()).longitude(location.getLongitude()).build();mBaiduMap.setMyLocationData(locData);}}private void navagitto(BDLocation location) {if(isfirstLocate){//更新到指定的经纬度LatLng latLng = new LatLng(location.getLatitude(),location.getLongitude());MapStatusUpdate update = MapStatusUpdateFactory.newLatLng(latLng);mBaiduMap.animateMapStatus(update);//设置缩放值update = MapStatusUpdateFactory.zoomTo(16f);mBaiduMap.animateMapStatus(update);isfirstLocate = false;}}@Overridepublic void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {//权限判断的回掉super.onRequestPermissionsResult(requestCode, permissions, grantResults);switch (requestCode){//请求码case 1:if(grantResults.length>0){for(int result :grantResults){if(result!=PackageManager.PERMISSION_GRANTED){Toast.makeText(MainActivity.this,"必须同意所有权限才可以使用",Toast.LENGTH_SHORT).show();finish();return;}}initLocation();}else{Toast.makeText(MainActivity.this,"发生未知错误,请重试",Toast.LENGTH_SHORT).show();finish();}break;}}}

布局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><com.baidu.mapapi.map.MapViewandroid:id="@+id/bmapView"android:layout_width="match_parent"android:layout_height="match_parent"android:clickable="true" /></LinearLayout>

ok这样就完成了

Android百度地图SDK最新详细使用(包含demo)相关推荐

  1. android 百度地图 在线建议查询,Android 百度地图 SDK v3_3_0 (五) ---POI搜索和在线建议查询功能...

    目前百度地图SDK所集成的检索服务包括:POI检索.公交信息查询.线路规划.地理编码.在线建议查询.短串分享. 本篇博客将先介绍POI检索和在线建议查询(在地图地位功能基础上实现的,还不知道定位的童靴 ...

  2. Android 百度地图 SDK v3.0.0 (四) 引入离线地图功能

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/37758097 一直觉得地图应用支持离线地图很重要啊,我等移动2G屌丝,流量不易, ...

  3. Android百度地图SDK:隐藏比例尺,隐藏百度LOGO,隐藏缩放控件

     Android百度地图SDK:隐藏(不显示)比例尺,隐藏(不显示)百度LOGO,隐藏(不显示)缩放控件 在自己的Android应用开发中使用百度地图SDK,百度会自动在MapView上添加百度的 ...

  4. Android百度地图SDK—地图标记

    Android百度地图SDK-地图标记 概述 正文 概述 记录Android百度地图开发过程中的一些细节 正文 /*** lat:圆心纬度* lng:圆心经度* radius:半径/米*/privat ...

  5. 用百度地图sdk返回详细地址描述

    入职新公司之后,需要对现有的手机项目进行改版 第一个改版就是在应用中添加定位的功能,可以用百度地图和高德地图sdk实现. 要求:gps或者网络定位到当前位置,取精度高的位置并返回详细地址描述 先来看看 ...

  6. Android百度地图——SDK版本v2.0.0初探

    大过年的,没回家.听着外面烟花爆竹声阵阵,大冷天的一个人也不想出去转.城市不管多么繁华,一个人都是感觉"无味".最近在研究百度地图的API使用,在使用过程中遇到些问题,有些心得吧, ...

  7. android百度地图sdk定位权限,Android:使用百度地图SDK实现定位:下载SDK、申请密钥、动态获得Android权限...

    最近想实现一个打卡的功能,想到可以利用百度地图的SDK.网上有很多关于百度地图SDK定位.地图功能应用的demo,这部分倒不是很困难.但网上很多博客写的内容一般都着重于代码部分,很多下载配置和编译器设 ...

  8. Android 百度地图 SDK v3.0.0 (一)

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/37729091 最近公司要把百度地图集成的项目中,于是我就研究了一天百度地图的SD ...

  9. Android百度地图SDK 导航初始化和地图初始化引起的冲突

    如题,同样是百度地图SDK开发过程中遇到的一个问题,交代下背景: 开发了一款内嵌百度地图的应用,因此里面差不多将目前百度地图SDK开放的主要功能都用到了,定位,地图显示,覆盖物标示,POI搜索,行程路 ...

最新文章

  1. define的多行定义
  2. linux批量管理矿机,华硕最新的挖矿主机板可以一次控制 20 个 GPU
  3. Doxygen简单经验谈。。。
  4. 经典案例鸢尾花分类, 在Keras中使用sklearn调参
  5. Outh2协议有哪四种授权模式?
  6. 随想录(cloud 网络库)
  7. codevs 2651 孔子教学——同桌
  8. jsp页面中显示word/excel文档方法
  9. pageControl设置不居中显示,居左或居右
  10. java list indexof_Java LinkedList indexOf()方法
  11. 采用参数服务器的分布式机器学习
  12. protobuf3 oneof
  13. 【FFMPEG】I,P,B帧和PTS,DTS时间戳的关系
  14. Java 截取字符串
  15. oracle怎么查询同名学生,数据库:SQL“查询同名同姓学生名单,并统计同名人数”延伸...
  16. android 重启自身app
  17. GTASA圣安地列斯如何打MOD2(简单教程)
  18. N4,C1,C4汽车(前、后装)芯片NEXTCHIP品牌。
  19. 总结一些网站加密和混淆技术
  20. Quill编辑器实现图片上传功能

热门文章

  1. Accessibility Insights 简介
  2. 煽情的儿子519=随笔
  3. ASP 基础一 网站开发 初步认识
  4. 7-180 大笨钟的心情
  5. 苹果手机速度慢_手机上网很卡?只需要几步就能让手机飞速起来
  6. arduino uno r3单片机封装图_【arduino】arduino ISP下载程序方法,用arduino uno给arduino nano下载程序...
  7. 软件专业职业培训课程设置之我见
  8. 2022年10个最佳地理空间数据分析 GIS 软件
  9. SwiftUI 代码速查之 06 设置SwiftUI backgroundColor的方法与foregroundColor相同
  10. C#画图控件ChartDirector使用说明