定位功能在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进行实时定位 获取当前城市地理信息相关推荐

  1. Android开发中调用百度地图SDK

    前言 我是一个在普通大学上学的孩子,主攻AR方向.我最近要通过unity3d来完成我的科研立项---AR指南针,当我开始这个项目时,我在想怎么做,首先在unity3d中调用AR摄像头不难,难就难在怎么 ...

  2. Android中级篇之百度地图SDK v3.5.0-一步一步带你仿各大主流APP地图定位移动选址功能

    from: http://blog.csdn.net/y1scp/article/details/49095729 定位+移动选址 百学须先立志-学前须知: 我们经常在各大主流APP上要求被写上地址, ...

  3. Android中集成高德地图SDK实现地图定位和导航功能(一)

    一.前期准备工作 1.在高德地图开发者平创建一个自己的项目 名称和应用类型随便填 2.添加Key 1.添加key 2.获取SHA1值 2.1.使用windwos+R 输入cmd 打开控制窗口 输入 w ...

  4. swift地图定位(二十一)集成百度导航SDK

    // // ViewController.swift // baidumapfirsttest // // Created by targetcloud on 2016/11/16. // Copyr ...

  5. Android中集成高德地图SDK实现地图定位和导航功能(二)

    我们接着上一篇文章开始继续实现android中集成高德地图的SDK实现地图 定位,搜索,导航的功能 如何让地图在手机上实现呢? 1.配置AndroidManifest 中的权限申请 可以参考官方文档 ...

  6. Android Studio快速集成讯飞SDK实现文字朗读功能

    今天,我们来学习一下怎么在Android Studio快速集成讯飞SDK实现文字朗读功能,先看一下效果图: 第一步 :了解TTS语音服务 TTS的全称为Text To Speech,即"从文 ...

  7. Android开发丶集成微信原生分享并于分享网页时加载网络缩略图

    微信分享也是一项很常用的功能了,以往都是用友盟或者mobShareSDK框架来实现的,这两者在微信官方的sdk基础上封装的很好,并且加入了一些很实用性的功能,不过这次因为只有微信平台的分享,而且微信登 ...

  8. Android平台上集成海康SDK(二)

    Android平台上集成海康SDK 以上是我之前写的一篇Android平台上集成海康SDK的文章,其中对于Android平台上集成海康SDK.基于海康SDK进行二次开发基本上进行了详细地介绍. 这篇文 ...

  9. Android 开发 框架系列 百度语音合成

    Android 开发 框架系列 百度语音合成 官方文档:http://ai.baidu.com/docs#/TTS-Android-SDK/6d5d6899 官方百度语音合成控制台:https://c ...

最新文章

  1. c4d支持mac系统渲染器有哪些_C4D常用的4大主流渲染器如何选择与比较 (OC/RS/VR/阿诺德)...
  2. Android传感器编程带实例
  3. php程序中报date错误
  4. oracle jdbc jar包_Oracle总结之plsql编程(基础七)
  5. Python学习笔记——基础篇【第五周】——模块
  6. web charset
  7. Linux关机重启指令
  8. LwIP协议栈的学习与应用
  9. 跟着【莫烦python】学习神经网络框架TensorFlow和Pytorch学习笔记
  10. 人脸关键点检测——dlib
  11. 计算机应用技术和it有什么区别,IT是程序员吗?IT究竟是什么意思?
  12. IMDB电影评论文本的神经网络分类
  13. 苹果开发者中心如何上传构建版本
  14. 再爆 Bug!Windows 11 任务栏、菜单栏无故消失,怎么解?
  15. Go error--cannot find package
  16. 超市收银系统测试报告
  17. 【Windows】服务程序
  18. 软件测试--MonkeyRunner(3)
  19. 22春天津大学《钢筋混凝土结构(1)》在线作业2
  20. MacBook Pro M1 安装抓包工具Burp Suite教程

热门文章

  1. 华为服务器所用的cmos芯片,小米大出风头:国产CMOS芯片+自研算法,打败了华为的索尼+徕卡...
  2. 出现net::ERR_CONNECTION_REFUSED问题,前端优化
  3. SAP EWM 库存报废
  4. 一朵“云“如何带来产业新变革?划重点!
  5. 高数考研归纳 - 微分方程
  6. windows怎么修改cmd命令提示符的默认初始路径
  7. MIT四足机器人Cheetah 3控制方案理解笔记(2)——Convex Mpc身体姿态控制
  8. edius软件中常用工程的设置 千万别搞错视频场
  9. 公众号主都在用什么写作软件写稿?
  10. syslog介绍(二):Linux下syslog基本配置