1、首先去百度地图开放平台创建应用

SHA1可以在Android studio右上角的Gradle中,选择app->Task->android->signingReport ,双击运行之后,在控制台会显示SHA1,MD5,SHA-256等等

包名可以在Androidmanifest.xml中获取,也可以在app目录下的gradle中找到

然后去百度地图开发者平台填写相关信息,申请key

成功之后,如图:

2、配置AndroidManifest.xml

首先添加与定位及地图的相关权限

 <!--//获取设备网络状态,禁用后无法获取网络状态--><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /><!--//网络权限,当禁用后,无法进行检索等相关业务--><uses-permission android:name="android.permission.INTERNET" /><!--//读取设备硬件信息,统计数据--><uses-permission android:name="android.permission.READ_PHONE_STATE" /><!--//读取系统信息,包含系统版本等信息,用作统计--><uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" /><!--//获取设备的网络状态,鉴权所需网络代理--><uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /><!--//允许sd卡写权限,需写入地图数据,禁用后无法显示地图--><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><!--//这个权限用于进行网络定位--><uses-permission android:name="android.permission.WRITE_SETTINGS" /><!--//这个权限用于访问GPS定位--><uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /><!--//获取统计数据--><uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /><!--//使用步行AR导航,配置Camera权限--><uses-permission android:name="android.permission.CAMERA" /><!--//程序在手机屏幕关闭后后台进程仍然运行--><uses-permission android:name="android.permission.WAKE_LOCK" />

Android6.0以后,部分权限需要动态获取

在<application></application>中加入下列代码配置开发密钥

  <meta-dataandroid:name="com.baidu.lbsapi.API_KEY"android:value="tBbkFj3UfziQGWFERgXqfSaaVwsdNLd5" />

3、地图初始化

在SDK各功能组件使用之前都需要调用“SDKInitializer.initialize(getApplicationContext())”,因此建议在应用创建时初始化SDK引用的Context为全局变量。

新建一个自定义的Application,在其onCreate方法中完成SDK的初始化。示例代码如下:

public class MyApplication extends Application {@Overridepublic void onCreate() {super.onCreate();//在使用SDK各组件之前初始化context信息,传入ApplicationContext   SDKInitializer.initialize(this);//自4.3.0起,百度地图SDK所有接口均支持百度坐标和国测局坐标,用此方法设置您使用的坐标类型.//包括BD09LL和GCJ02两种坐标,默认是BD09LL坐标。SDKInitializer.setCoordType(CoordType.BD09LL);}
}

在AndroidManifest.xml中申明该application

4、显示地图

(1)在布局文件中增加MapView

<com.baidu.mapapi.map.MapView  android:id="@+id/bmapView"  android:layout_width="match_parent"  android:layout_height="match_parent"  android:clickable="true" />

(2) 在Activity中管理MapView的生命周期

public class MainActivity extends AppCompatActivity {MapView mapView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mapView=findViewById(R.id.bmapView);}@Overrideprotected void onDestroy() {super.onDestroy();mapView.onDestroy();}@Overrideprotected void onPause() {super.onPause();mapView.onPause();}@Overrideprotected void onResume() {super.onResume();//在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理mapView.onResume();}
}

(3)然后运行工程,可以看到地图

5、定位实现

(1)在AndroidManifest.xml增加如下权限:

<!-- 这个权限用于进行网络定位 -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<!-- 这个权限用于访问GPS定位 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

(2)在Application标签中声明定位的service组件

<service android:name="com.baidu.location.f"android:enabled="true"android:process=":remote"/>

(3)开启地图的定位图层

mbaiduMap.setMyLocationEnabled(true);

(4)构造地图数据

我们通过继承抽象类BDAbstractListener并重写其onReceieveLocation方法来获取定位数据,并将其传给MapView。

 public class MyLocationListener extends BDAbstractLocationListener {@Overridepublic void onReceiveLocation(BDLocation location) {//mapView 销毁后不在处理新接收的位置if (location == null || mapView == null){return;}MyLocationData locData = new MyLocationData.Builder().accuracy(location.getRadius())// 此处设置开发者获取到的方向信息,顺时针0-360.direction(location.getDirection()).latitude(location.getLatitude()).longitude(location.getLongitude()).build();mbaiduMap.setMyLocationData(locData);}}

(5)通过LocationClient发起定位

  public void InitLocation(){//定位初始化mLocationClient = new LocationClient(this);//通过LocationClientOption设置LocationClient相关参数LocationClientOption option = new LocationClientOption();option.setOpenGps(true); // 打开gpsoption.setCoorType("bd09ll"); // 设置坐标类型option.setScanSpan(1000);//设置locationClientOptionmLocationClient.setLocOption(option);//注册LocationListener监听器MyOwnLocationListener myLocationListener = new MyOwnLocationListener();mLocationClient.registerLocationListener(myLocationListener);//开启地图定位图层mLocationClient.start();}

(6)正确管理各部分的生命周期

 @Overrideprotected void onDestroy() {mLocationClient.stop();mbaiduMap.setMyLocationEnabled(false);mapView.onDestroy();mapView = null;super.onDestroy();}@Overrideprotected void onPause() {super.onPause();mapView.onPause();}@Overrideprotected void onResume() {super.onResume();//在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理mapView.onResume();}

(7)运行工程之后发现定位是有了,但是没有定位到当前位置,还是默认定位到北京

(8)在MyLocationListener 中判断是否是第一次定位,如果是设置并显示中心点

if (isFirstLocation) {isFirstLocation = false;//设置并显示中心点setPosition2Center(mbaiduMap, location, true);}

(9)构造setPosition2Center()方法,用来设置中心点

 public void setPosition2Center(BaiduMap map, BDLocation bdLocation, Boolean isShowLoc) {MyLocationData locData = new MyLocationData.Builder().accuracy(bdLocation.getRadius()).direction(bdLocation.getRadius()).latitude(bdLocation.getLatitude()).longitude(bdLocation.getLongitude()).build();map.setMyLocationData(locData);if (isShowLoc) {LatLng ll = new LatLng(bdLocation.getLatitude(), bdLocation.getLongitude());MapStatus.Builder builder = new MapStatus.Builder();builder.target(ll).zoom(18.0f);map.animateMapStatus(MapStatusUpdateFactory.newMapStatus(builder.build()));}}

在运行工程,发现已经能定位到当前位置了

百度地图地图及定位实现相关推荐

  1. Android学习-- 基于位置的服务 LBS(基于百度地图Android SDK)--定位SDK

    原文:Android学习-- 基于位置的服务 LBS(基于百度地图Android SDK)--定位SDK 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.ne ...

  2. android百度导航实现,Android 集成百度地图实现设备定位

    Android 集成百度地图实现设备定位 步骤1: 申请android 端SDK : http://lbsyun.baidu.com/ 步骤2: 下载基础版SDK 步骤3: 下载示例程序 步骤4: 开 ...

  3. Android百度地图之位置定位和附近查找代码简单实现 (上)

    很长时间没有做Android相关知识了,闲暇之余再弄了弄最新的百度地图API,主要是进行百度地图附近餐馆查找功能来练练手,同时熟悉下最新的API教程.文章比较基础,也希望对你有所帮助~参考前文:   ...

  4. 基于百度地图实现Android定位功能实现(详解+教程)

    基于百度地图实现Android定位功能实现(详解+教程) 1.初始化 (一)获取到SHA1 (1)找到View中的Tool Windows并打开Terminal (2)找到你的jdk的bin目录,小编 ...

  5. Android利用百度地图API实现定位功能(记录)

    本篇主要介绍一下如何使用百度地图API来实现定位以及地图的基本使用. 效果图如下: 步骤如下: 一.申请APIKey. (1)注册百度账号并申请开发者资质:http://developer.baidu ...

  6. HTML5接入百度地图并搜索定位

    首先我们得去百度那里注册一下,拥有自己的Appkey,连接:http://lbsyun.baidu.com/ 也可以使用别人的,当然最好还是自己去注册比较好. 第二步,在你自己的网页中引入: 下面直接 ...

  7. 百度地图三种定位方式测试(高精度、低功耗、仅用设备)

    百度地图三种定位方式测试(高精度.低功耗.仅用设备) Android定位SDK自v7.0版本起,按照附加功能不同,向开发者提供了四种不同类型的定位开发包,可根据不同需求,自有选择所需类型的开发包使用. ...

  8. Android百度地图地理围栏定位间隔

    实现百度地图地理围栏定位间隔 继承GeoFenceClient,当定位成功的时候停止定位,间隔30秒再启动 public class MyGeoFenceClient extends GeoFence ...

  9. 百度地图官方的定位和方法

    这几天比较闲,闲来无事就把之前做过项目的东西整理一下,今天要写的是项目中引用百度地图第三方的定位这些,供大家快速的集成和使用.首先在百度地图http://lbsyun.baidu.com/sdk/do ...

最新文章

  1. 元气满满 开工大吉 2020「升职加薪,走好这三步...」
  2. 使用Tensorflow实现残差网络ResNet-50
  3. 算法:合并两个有序链表
  4. 前端构建工具之争——Webpack vs Gulp 谁会被拍死在沙滩上
  5. Android深度探索读后感第二章
  6. Linux iptables用法与NAT
  7. Android学习网站
  8. 多线程_C# 多线程技术
  9. 数字化转型方法论_50+企业数字化转型、管理的方法论,这本书到底有什么干货?...
  10. 自己写的Weblogic的poc
  11. 【图像融合】主成分分析PCA
  12. iOS中 语音识别功能/语音转文字教程具体解释 韩俊强的博客
  13. office插件开发_Excel插件——方方格子
  14. 用什么软件测试微信朋友圈被屏蔽,怎么检测朋友圈被屏蔽?清师傅帮你
  15. Unity3D for VR 学习(2): 暴风魔镜框架探索
  16. 高效开发工具使用技巧
  17. 怎么禁用chrom'停用开发者模式'弹窗
  18. 一种典型的三极管和MOS管结合的开关控制电路
  19. 微信公众号文章已经获授权加入白名单了,为什么系统还是自动替换成原文章?
  20. java面试项目车辆管理_基于jsp的车辆管理系统-JavaEE实现车辆管理系统 - java项目源码...

热门文章

  1. python画图横坐标_python画图把时间作为横坐标的方法
  2. 【数字IC验证快速入门】14、SystemVerilog学习之基本语法1(数组、队列、结构体、枚举、字符串...内含实践练习)
  3. 开发板浮点型运算能力测试
  4. 如何看待哔哩哔哩(B站)的后端代码主仓库被上传至了GitHub?
  5. MATLAB计算信号短时平均过零率
  6. java类加载器分类_Java类加载器特点的具体介绍
  7. 【Python】制作圆角图像的两种方案对比
  8. 蓝牙AOA定位:如何通过AOA角度计算坐标
  9. 2016年VB图书253本推荐
  10. 1930年代后期发明的断层合成技术:概念:移动-叠加