Android基于百度LBS的定位

  • 一、百度SDK使用流程
    • 1. 注册开发者账号
    • 2. 获取SHA1和包名
  • 二、AndroidStudio的配置
    • 1. 下载SDK
    • 2. 配置AndroidManifest.xml文件
    • 3. 配置定位环境
  • 三、页面设计
  • 四、显示地图和定位
    • 1. 编写Fragment.java文件
    • 2.编写MyLocationListener.java文件
  • 五、真机效果展示
    • 1. 进入开发者模式,开启USB调试
    • 2. 使用数据线连接手机和电脑进行文件传输
    • 3. 在移动端显示位置
  • 六、源码地址

一、百度SDK使用流程

1. 注册开发者账号

百度搜索“百度地图开发者”,进入后选择登陆,如果没有百度开发者账号则选择注册,然后再选择登陆

  • 注册开发者账号
  • 创建应用
  • 填写SHA1和包名

2. 获取SHA1和包名

①获取SHA1
打开Android Stdio,在控制台进入keytool所在路径下,输入

keytool -list -v -keystore C:\Users\dell.android \debug.keystore

C:\Android.android\debug.keystore是debug.keystore这个文件的路径,一般在c盘下的users里的电脑名下的.Android文件夹里。

回车后会要求输入密钥库口令,一般默认为android,出现以下情况则说明密钥生成成功,复制证书指纹中的SHA1

② 获取包名
打开AndroidStudio项目查看包名


二、AndroidStudio的配置

1. 下载SDK

  • 下载SDK本地依赖:SDK下载-百度LBS开放平台
  • 功能选择基础定位基础地图
  • 选择SDK功能与配置并下载jar包
  • 将下载的SDK添加到本地项目中
  • 解压文件夹并将libs文件夹放入项目的app目录下
  • 右键BaiduLBS_Android.jar选择Add As Library
    下图即显示项目依赖中已添加此包

2. 配置AndroidManifest.xml文件

  • 在< application >中加入如下代码配置开发密钥(这个密钥就是之前申请的密钥)
<application>  <meta-data  android:name="com.baidu.lbsapi.API_KEY"  android:value="开发者 key" />
</application>
  • 在< application/ >外部添加如下权限声明
<!-- 访问网络,进行地图相关业务数据请求,包括地图数据,路线规划,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" />

3. 配置定位环境

  • 在AndroidManifest.xml加入如下权限使用声明
<!-- 这个权限用于进行网络定位 -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<!-- 这个权限用于访问GPS定位 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
  • 在Application标签中声明定位的service组件
<service android:name="com.baidu.location.f"android:enabled="true"android:process=":remote"/>

三、页面设计

  • 帧布局
    页面展示如下:

    代码如下:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent" ><!--百度地图控件--><com.baidu.mapapi.map.MapViewandroid:id="@+id/bmapView"android:layout_width="fill_parent"android:layout_height="fill_parent"android:clickable="true" /><!--位置文本布局的背景色代码的前2位代码为透明度--><LinearLayoutandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:background="#e0000000"android:orientation="vertical" ><LinearLayoutandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginLeft="12dp"android:layout_marginTop="20dp"android:orientation="horizontal" ><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="纬度:"android:textColor="#ffffff"android:textSize="15dp" /><TextViewandroid:id="@+id/tv_Lat"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text=""android:textColor="#ffffff"android:textSize="15dp" /></LinearLayout><LinearLayoutandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginLeft="12dp"android:layout_marginTop="10dp"android:orientation="horizontal" ><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="经度:"android:textColor="#ffffff"android:textSize="15dp" /><TextViewandroid:id="@+id/tv_Lon"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text=""android:textColor="#ffffff"android:textSize="15dp" /></LinearLayout><LinearLayoutandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginBottom="10dp"android:layout_marginLeft="12dp"android:layout_marginTop="10dp"android:orientation="horizontal" ><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="地址:"android:textColor="#ffffff"android:textSize="15dp" /><TextViewandroid:id="@+id/tv_Add"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text=""android:textColor="#ffffff"android:textSize="15dp" /></LinearLayout></LinearLayout>
</FrameLayout>

四、显示地图和定位

1. 编写Fragment.java文件

  • Fragment中的变量
package com.example.baidumap;
public class MainActivity extends AppCompatActivity {LocationClient mLocationClient;  //定位客户端MapView mapView;  //Android Widget地图控件BaiduMap baiduMap;boolean isFirstLocate = true;TextView tv_Lat;  //纬度TextView tv_Lon;  //经度TextView tv_Add;  //地址
  • 重写方法
    @Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);//如果没有定位权限,动态请求用户允许使用该权限if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 1);}else {requestLocation();}}@Overrideprotected void onResume() {super.onResume();mapView.onResume();}@Overrideprotected void onPause() {super.onPause();mapView.onResume();}@Overrideprotected void onDestroy() {super.onDestroy();mLocationClient.stop();mapView.onDestroy();}
  • 初始化requestLocation()和initLocation()
@Overridepublic void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {switch (requestCode) {case 1:if (grantResults[0] != PackageManager.PERMISSION_GRANTED) {Toast.makeText(this, "没有定位权限!", Toast.LENGTH_LONG).show();finish();} else {requestLocation();}}}private void requestLocation() {initLocation();mLocationClient.start();}private void initLocation() {  //初始化mLocationClient = new LocationClient(getApplicationContext());mLocationClient.registerLocationListener(new MyLocationListener());SDKInitializer.initialize(getApplicationContext());setContentView(R.layout.activity_main);mapView = findViewById(R.id.bmapView);baiduMap = mapView.getMap();tv_Lat = findViewById(R.id.tv_Lat);tv_Lon = findViewById(R.id.tv_Lon);tv_Add = findViewById(R.id.tv_Add);LocationClientOption option = new LocationClientOption();//设置扫描时间间隔option.setScanSpan(1000);//设置定位模式,三选一option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy);/*option.setLocationMode(LocationClientOption.LocationMode.Battery_Saving);option.setLocationMode(LocationClientOption.LocationMode.Device_Sensors);*///设置需要地址信息option.setIsNeedAddress(true);//保存定位参数mLocationClient.setLocOption(option);}
}
  • 定义定位监听器 MyLocationListener
 //内部类,百度位置监听器private class MyLocationListener  implements BDLocationListener {@Overridepublic void onReceiveLocation(BDLocation bdLocation) {tv_Lat.setText(bdLocation.getLatitude()+"");tv_Lon.setText(bdLocation.getLongitude()+"");tv_Add.setText(bdLocation.getAddrStr());if(bdLocation.getLocType()==BDLocation.TypeGpsLocation || bdLocation.getLocType()==BDLocation.TypeNetWorkLocation){navigateTo(bdLocation);}}}
  • 处理第一次定位navigateTo()
 private void navigateTo(BDLocation bdLocation) {if(isFirstLocate){LatLng ll = new LatLng(bdLocation.getLatitude(),bdLocation.getLongitude());MapStatusUpdate update = MapStatusUpdateFactory.newLatLng(ll);baiduMap.animateMapStatus(update);isFirstLocate = false;}}

2.编写MyLocationListener.java文件

 public class MyLocationListener extends BDAbstractLocationListener {private MapView mMapView;private BaiduMap mBaiduMap;private boolean isFirstLocate = true;//构造方法用于传递地图控件public MyLocationListener(MapView mMapView,BaiduMap mBaiduMap) {this.mMapView = mMapView;this.mBaiduMap = mBaiduMap;}@Overridepublic void onReceiveLocation(BDLocation location) {LatLng ll = new LatLng(location.getLatitude(), location.getLongitude());if (isFirstLocate) {isFirstLocate = false;//给地图设置状态mBaiduMap.animateMapStatus(MapStatusUpdateFactory.newLatLng(ll));}//mapView 销毁后不在处理新接收的位置if (location == null || mMapView == 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);}

五、真机效果展示

1. 进入开发者模式,开启USB调试

2. 使用数据线连接手机和电脑进行文件传输

3. 在移动端显示位置

六、源码地址

gitee仓库地址

Android基于百度LBS的定位相关推荐

  1. 基于百度LBS的定位

    基于百度LBS的定位 注册百度开发者账号 地图 定位 注册百度开发者账号 1.进入百度地图开放平台注册 地图 2.创建应用 3.获取SHA1 创建成功 下载SDK 导入jar包 导入成功 配置Andr ...

  2. 基于百度LBS的APP开发

    基于百度LBS的APP开发 一.引用百度SDK 1.登录平台 2.创建应用 3.获取密匙 4.下载开发包 5. 添加注册远程服务和配置应用Key 二.在AS中完成 1.布局mainactivity.x ...

  3. android百度地图获取定位信息吗,android使用百度地圖定位(獲取當前經緯度和地址信息)...

    首先,當然是把需要用到的包導入到工程項目中.(沒有包的自己去百度API官網下載) 把 baidumapapi_v3_0_0.jar 和 locSDK_4.2.jar復制粘貼到項目的libs目錄下, 然 ...

  4. Android基于高德地图实时定位服务

    Service功能有:实时定位(后台进行) Service不会,去百度谷歌 功能有 实时定位(30秒间隔) 判断是否在规定的时间段内 判断距离是否大于规定的距离 判断服务是否在开启的状态 服务代码:L ...

  5. android百度定位代码,android开发:百度地图及定位的演示代码

    //百度地图定位的代码,需要加载百度地图API的SDK LocationClient client = new LocationClient(mContext); LocationClientOpti ...

  6. Android studio百度地图之定位到国外

    定位在国外的问题 在定位时,除了会定位到几内亚湾,还可能会定位到美国,这个原因可能是因为你的模拟器的问题,在弄地图定位的时候,尽量使用真机或者第三方模拟器,像Android studio自带的模拟器在 ...

  7. 安卓Android基于百度云平台人脸识别学生考勤签到系统设计

    开发软件:Idea + Mysql + AndroidStudio + 雷电模拟器 基于安卓开发一个人脸识别签到系统,服务器采用springboot框架开发,管理员登录后可以添加和维护人脸信息,添加的 ...

  8. Android 基于4G模块 GPS定位

    获取定位信息,测试前先确定打开,位置信息 package com.example.testactivity.service;import java.text.DecimalFormat; import ...

  9. android调用百度地图第一次定位失败,android 百度地图 定位获取位置失败 62错误...

    mysql 常用语句模板 插入INSERT IGNORE INTO test (`f1`, `f2`, `f3`) VALUES (v1,v2,v3); 更新update test set f1=v1 ...

最新文章

  1. 蓝牙怎么实现传输的_不知道手机蓝牙有啥用?1分钟带你了解蓝牙这6种用法!涨知识啦...
  2. Kubernetes里ingress配置的一些例子
  3. Java 性能优化实战记录(2)---句柄泄漏和监控
  4. Hive精华问答 | Hive和传统数据库有什么不同?
  5. 小程序运行时相关信息
  6. pcf8563c语言程序,PCF8563驱动程序(C语言版)
  7. js 获取昨天,今天,本周,上周,季度等时间范围(封装的js)
  8. 【车辆检测】基于matlab yolo v2车辆检测识别【含Matlab源码 581期】
  9. matlab T检验(ttest,ttest2)
  10. HTML5分级标题,HTML5与CSS3基础教程:创建分级标题_html/css_WEB-ITnose
  11. 超越函数e^(-x^2)在(-∞, +∞)上的定积分的两种解法
  12. 缓存路由关联的两个生命周期activated和deactivated
  13. 树上的动态规划--树的最大独立集--刷表法
  14. MP3/MP4原理电路图下载全搜集
  15. 用Python打造属于自己的“今日头条” | 一个非常适合练手的全栈项目
  16. 什么是C语言,对C语言的基本认识,C语言开始。
  17. 360扩展中心没有idm了_媒体中心扩展器和Xbox 360
  18. 飞飞php2.8采集失败_飞飞影视系统PHP版自动采集助手
  19. zizhan - 瞄准镜
  20. windows开机自动进bios 常见的问题

热门文章

  1. 理解TP、FP、TN、FN
  2. 阿里巴巴代码规范【强制】
  3. Linux基础命令(七)LVM与磁盘配额
  4. 51单片机定时器2做串口波特率发生器
  5. opencv调用yolov3模型来进行图像检测
  6. LUOGU P4088 [USACO18FEB]Slingshot(线段树)
  7. 禁止在计算机旁放水的英语,英剧_《yes or no 2》经典台词(七):放水灯_沪江英语...
  8. java中 try用法,Java里try catch的简单用法
  9. “玲珑杯”线上赛 Round #17 河南专场 B:震惊,99%+的中国人都会算错的问题(容斥计算)...
  10. Linux内核中oops 错误解析以及问题定位