android开发游记:集成百度定位SDK进行实时定位 获取当前城市地理信息
定位功能在app开发中很常用,大多数企业都是不具备定位资质的,所有一般是通过接入第三方的sdk来进行定位,比较熟悉的有如:百度、高德、谷歌、腾讯等。而国内比较地图策划比较成熟的主要是百度和高德,这里就以百度为例,介绍一下接入流程和方法。
详细资料请查看官方SDK文档:
http://developer.baidu.com/map/index.php?title=android-locsdk/guide/v5-0
这里是官方实例代码和SDK下载地址:
BaiduLBS_AndroidSDK_Sample.zip
使用百度定位SDK必须去官网注册开发者账号并申请key:
http://developer.baidu.com/map/index.php?title=android-locsdk/guide/key
官方文档把接入方法写的很详细,推荐直接看文档,下面我总结一下接入的流程和遇到的问题:
首先要做的是导入库文件:
下载SDK把SDK中的.so文件及其目录和locSDK_xxx.jar都导入进工程的libs目录下
百度的定位功能和地图功能是分开的,所以只需要引入定位的相关类库就可以了,如下:
不同的目录下都导入了相应的liblocSDK.so是为了兼容执行不同指令集的CPU的机型,这里不需要理解,直接拷贝下去就可以了。
然后设置AndroidManifest.xml文件并添加相应权限:
<!-- 这个权限用于进行网络定位-->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>
<!-- 这个权限用于访问GPS定位-->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
<!-- 用于访问wifi网络信息,wifi信息会用于进行网络定位-->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
<!-- 获取运营商信息,用于支持提供运营商信息相关的接口-->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
<!-- 这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位-->
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
<!-- 用于读取手机当前的状态-->
<uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>
<!-- 写入扩展存储,向扩展卡写入数据,用于写入离线定位数据-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
<!-- 访问网络,网络定位需要上网-->
<uses-permission android:name="android.permission.INTERNET" />
<!-- SD卡读取权限,用户写入离线定位数据-->
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"></uses-permission>
百度的定位在Service中完成处理的,所以要现在AndroidManifest.xml声明这个Service
在<application>
节点下添加一个用于定位的后台Service的声明:
<service android:name="com.baidu.location.f" android:enabled="true" android:process=":remote">
</service>
使用百度定位SDK必须去官网注册开发者账号并申请key,把申请到的key填入AndroidManifest.xml文件中
在<application>
节点下添加key常量:
<meta-dataandroid:name="com.baidu.lbsapi.API_KEY"android:value="key" /> //key:开发者申请的key
配置完成了,下面就可以初始化了:
mLocationClient = new LocationClient(this.getApplicationContext());
由于定位功能在app中的各个页面可能都会用到,所以建议把上面的mLocationClient 初始化放在Application中作为全局变量来使用,当然你也可以在每个Activity中都去new一个,但是不建议这样做。
具体设置方法:
新建一个类继承自Application,定义一个公用的LocationClient 并在onCreate中实例化:
public class MyApplication extends Application {public LocationClient mLocationClient;@Overridepublic void onCreate() {super.onCreate();//baidu locmLocationClient = new LocationClient(this.getApplicationContext());} }
然后在自己的Activity中取得这个LocationClient,并设置定位监听:
mLocationClient = ((MyApplication)getApplication()).mLocationClient; mLocationClient.registerLocationListener(new MyLocationListener());
监听器代码示例如下,这里只打印城市展示:
public class MyLocationListener implements BDLocationListener {@Overridepublic void onReceiveLocation(BDLocation location) {//打印出当前的城市名Toast.makeText(this, location.getCity(), Toast.LENGTH_SHORT).show();//location.getLongitude(); 获取当前位置经度//location.getLatitude(); 获取当前位置纬度} }
值得注意的是:mLocationClient 是属于Application的全局变量,我们给他注册了一个在本地Activity中声明的定位监听器MyLocationListener,由于Application的生命周期比Activity长,所以在关闭这个页面的时候,mLocationClient 任然持有这个监听对象的引用就会导致该Activity无法释放从而导致内存泄露,虽然运行之后看不出来,但是一旦你重复多次打开关闭定位页面就会发现,app所占用的内存会不断递增直到爆炸应用崩溃。所有还应该做一件事,就是在该页面关闭的时候及时注销这个监听器:
务必在Activity的onDestroy方法中添加如下代码:@Overrideprotected void onDestroy() {mLocationClient.unRegisterLocationListener(this);//取消注册的位置监听,以免内存泄露mLocationClient.stop();// 退出时销毁定位super.onDestroy();}
到这里,我们初始化了定位类并注册了设置监听,下面我们给定位类设置相应参数后就可以启动定位了:
LocationClientOption option = new LocationClientOption();option.setCoorType("bd09ll"); // 设置坐标类型option.setIsNeedAddress(true); //设置是否需要地址信息,默认不需要//option.setScanSpan(1000); //多久定位一次mLocationClient.setLocOption(option);
注意要获取当前城市必须设option.setIsNeedAddress(true)
,否则默认为false,获取城市会返回null
option.setScanSpan(1000)
表示多久定位一次,0表示只定义一次,默认设置是0,重复定位会加快手机耗电并且影响性能,如果没有实时定位的需要的话,不要设置该属性。
设置完参数后,就可以开始定位了:
mLocationClient.start();
这里功能就集成完毕了,只需要自定义你的定位监听器MyLocationListener 重写其onReceiveLocation(location)方法来执行你自己的逻辑就ok了。
location.getCity(); //获取当前城市名location.getLongitude(); //获取当前位置经度location.getLatitude(); //获取当前位置纬度
这里贴出了获取当前城市名和经纬度的方法,其他的请参考官方帮助文档:
http://wiki.lbsyun.baidu.com/cms/androidloc/doc/v6_0_3/doc/index.html
android开发游记:集成百度定位SDK进行实时定位 获取当前城市地理信息相关推荐
- Android开发中调用百度地图SDK
前言 我是一个在普通大学上学的孩子,主攻AR方向.我最近要通过unity3d来完成我的科研立项---AR指南针,当我开始这个项目时,我在想怎么做,首先在unity3d中调用AR摄像头不难,难就难在怎么 ...
- Android中级篇之百度地图SDK v3.5.0-一步一步带你仿各大主流APP地图定位移动选址功能
from: http://blog.csdn.net/y1scp/article/details/49095729 定位+移动选址 百学须先立志-学前须知: 我们经常在各大主流APP上要求被写上地址, ...
- Android中集成高德地图SDK实现地图定位和导航功能(一)
一.前期准备工作 1.在高德地图开发者平创建一个自己的项目 名称和应用类型随便填 2.添加Key 1.添加key 2.获取SHA1值 2.1.使用windwos+R 输入cmd 打开控制窗口 输入 w ...
- swift地图定位(二十一)集成百度导航SDK
// // ViewController.swift // baidumapfirsttest // // Created by targetcloud on 2016/11/16. // Copyr ...
- Android中集成高德地图SDK实现地图定位和导航功能(二)
我们接着上一篇文章开始继续实现android中集成高德地图的SDK实现地图 定位,搜索,导航的功能 如何让地图在手机上实现呢? 1.配置AndroidManifest 中的权限申请 可以参考官方文档 ...
- Android Studio快速集成讯飞SDK实现文字朗读功能
今天,我们来学习一下怎么在Android Studio快速集成讯飞SDK实现文字朗读功能,先看一下效果图: 第一步 :了解TTS语音服务 TTS的全称为Text To Speech,即"从文 ...
- Android开发丶集成微信原生分享并于分享网页时加载网络缩略图
微信分享也是一项很常用的功能了,以往都是用友盟或者mobShareSDK框架来实现的,这两者在微信官方的sdk基础上封装的很好,并且加入了一些很实用性的功能,不过这次因为只有微信平台的分享,而且微信登 ...
- Android平台上集成海康SDK(二)
Android平台上集成海康SDK 以上是我之前写的一篇Android平台上集成海康SDK的文章,其中对于Android平台上集成海康SDK.基于海康SDK进行二次开发基本上进行了详细地介绍. 这篇文 ...
- Android 开发 框架系列 百度语音合成
Android 开发 框架系列 百度语音合成 官方文档:http://ai.baidu.com/docs#/TTS-Android-SDK/6d5d6899 官方百度语音合成控制台:https://c ...
最新文章
- c4d支持mac系统渲染器有哪些_C4D常用的4大主流渲染器如何选择与比较 (OC/RS/VR/阿诺德)...
- Android传感器编程带实例
- php程序中报date错误
- oracle jdbc jar包_Oracle总结之plsql编程(基础七)
- Python学习笔记——基础篇【第五周】——模块
- web charset
- Linux关机重启指令
- LwIP协议栈的学习与应用
- 跟着【莫烦python】学习神经网络框架TensorFlow和Pytorch学习笔记
- 人脸关键点检测——dlib
- 计算机应用技术和it有什么区别,IT是程序员吗?IT究竟是什么意思?
- IMDB电影评论文本的神经网络分类
- 苹果开发者中心如何上传构建版本
- 再爆 Bug!Windows 11 任务栏、菜单栏无故消失,怎么解?
- Go error--cannot find package
- 超市收银系统测试报告
- 【Windows】服务程序
- 软件测试--MonkeyRunner(3)
- 22春天津大学《钢筋混凝土结构(1)》在线作业2
- MacBook Pro M1 安装抓包工具Burp Suite教程
热门文章
- 华为服务器所用的cmos芯片,小米大出风头:国产CMOS芯片+自研算法,打败了华为的索尼+徕卡...
- 出现net::ERR_CONNECTION_REFUSED问题,前端优化
- SAP EWM 库存报废
- 一朵“云“如何带来产业新变革?划重点!
- 高数考研归纳 - 微分方程
- windows怎么修改cmd命令提示符的默认初始路径
- MIT四足机器人Cheetah 3控制方案理解笔记(2)——Convex Mpc身体姿态控制
- edius软件中常用工程的设置 千万别搞错视频场
- 公众号主都在用什么写作软件写稿?
- syslog介绍(二):Linux下syslog基本配置