Android使用百度定位SDK方法及错误处理
下面事例是使用Android平台的部分代码。对于这个平台百度的开放人员已经写了完整的demo,把工程导入到eclipse中之后一般没有错误,如果报错的话,eclipse也会给出提示。一般可以通过将propertie.properties文件名字改为default.properties就 可以了,如果还有错误的话,显示工程activity错误啊什么的,就是SDK版本不对的问题了,你可以通过他的manifest文件查 看<uses-sdk android:minSdkVersion="8" />找到这个最小值,比如我下载的是2.6他的最低版本是5,我eclipse默认版本是8,就可以同过右键单击该工程,选择最下面那个properties项,然后在弹出对话框的右侧列表中选择Android,在左侧选择API level为5,也就是2.0,然后确定。就木有问题了。
下面说一下使用该API的具体步骤:
也可以查看百度定位SDK自己的开发指南
1、首先第一步就是搭配环境:
①先将百度demo中的libs文件夹复制到自己的工程。(别忘记把jar包build path)
②然后复制
- <service android:name="com.baidu.location.f" android:enabled="true"
- android:process=":remote" android:permission="android.permission.BAIDU_LOCATION_SERVICE">
- <intent-filter>
- <action android:name="com.baidu.location.service_v2.6"></action>
- </intent-filter>
- </service>
到manifest的application节点。
接下来复制百度地位SDK需要的permission
- <permission android:name="android.permission.BAIDU_LOCATION_SERVICE"></permission>
- <uses-permission android:name="android.permission.BAIDU_LOCATION_SERVICE">
- </uses-permission>
- <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION">
- </uses-permission>
- <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION">
- </uses-permission>
- <uses-permission android:name="android.permission.ACCESS_WIFI_STATE">
- </uses-permission>
- <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE">
- </uses-permission>
- <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" />
- <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS">
- </uses-permission>
- <uses-permission android:name="android.permission.READ_LOGS"></uses-permission>
③ 接下来就可以在代码中放心的使用百度定位SDK了。
下面是来自百度的提醒,需要注意的是第五条,因为我们第一次经常定位不到位置:
1、您需要确保程序编译通过。如果对自己写的代码有疑问,可以下载官方高级示例,查看标准源代码。
2、请确保网络通畅,无论是连接wifi还是使用2G/3G信号。
3、定位SDK的调用必须在主线程中。
4、必须在定位SDK启动前设定好参数,例如是否使用GPS,扫描时间间隔设置等。我们强烈建议您设置自己的prodName,并保管好,这样方便我们为您提供更好的定位服务。
5、定位SDK start之后立即执行,这种情况下很难定位成功,因为定位SDK刚开始启动还没有获取到定位信息。这时getlocation一般为null。如果是要获取位置成功,可以在listerner中添加一个判断如果strData为空,则再发起一次定位。
6、定位覆盖率大概在98%。就是说有2%可能服务器没有数据,所以定位会失败。只需要走到别的地方,或者多试几次即可成功定位。
7、请使用真机。在虚拟机上无法进行定位测试。
下面就是我的事例代码:
具体思路是:将开启和获取位置的代码分开来做,可以在程序刚开启的时候就start。因为据上面所说,有时候可能两分钟才能获取到位置,对于我们需要展示信息来说,这是绝对不可以的。如果在主线程卡两分钟后果可想而知的。
需要说名的是:我这里没有设置时间间隔public void setScanSpan ( int ) //设置定时定位的时间间隔。单位ms,如果不设置或者所设置的整数值小于1000(ms)时,采用第一次定位模式。
每调用一次requestLocatin(),定位SDK会发起一次定位。请求定位与监听结果一一对应;如果所设的整数值大于等于1000(ms)时,定位SDK内部使用定时定位模式。
调用requestLocation( )后,每隔设定的时间,定位SDK就会进行一次定位。如果定位SDK根据定位依据发现位置没有发生变化,就不会发起网络请求,返回上一次定位的结果;如果发现位置改变,就进行网络请求进行定位,得到新的定位结果。
定时定位时,调用一次requestLocation,会定时监听到定位结果。设定了定时定位后,可以热切换成一次定位,需要重新设置时间间隔小于1000(ms)即可。locationClient对象stop后,将不再进行定位。 如果设定了定时定位模式后,多次调用requestLocation(),则是每隔一段时间进行一次定位,同时额外的定位请求也会进行定位,但频率不会超过1秒一次。
- import android.content.Context;
- import com.baidu.location.BDLocation;
- import com.baidu.location.BDLocationListener;
- import com.baidu.location.LocationClient;
- import com.baidu.location.LocationClientOption;
- import com.palmdeal.entity.LocationInfo.SItude;
- import com.palmdeal.util.Logger;
- public class LocationProvider {
- private static LocationClient mLocationClient = null;
- private static SItude station = new SItude();
- private static MyBDListener listener = new MyBDListener();
- Context context;
- public LocationProvider(Context context) {
- super();
- this.context = context;
- }
- public void startLocation() {
- mLocationClient = new LocationClient(context);
- LocationClientOption option = new LocationClientOption();
- option.setOpenGps(true); // 打开gps
- option.setCoorType("bd09ll"); // 设置坐标类型为bd09ll
- option.setPriority(LocationClientOption.NetWorkFirst); // 设置网络优先
- option.setProdName("demo"); // 设置产品线名称
- mLocationClient.setLocOption(option);
- mLocationClient.registerLocationListener(listener);
- mLocationClient.start();//将开启与获取位置分开,就可以尽量的在后面的使用中获取到位置
- }
- /**
- * 停止,减少资源消耗
- */
- public void stopListener() {
- if (mLocationClient != null && mLocationClient.isStarted()) {
- mLocationClient.stop();
- mLocationClient = null;
- }
- }
- /**
- * 更新位置并保存到SItude中
- */
- public void updateListener() {
- if (mLocationClient != null && mLocationClient.isStarted()) {
- mLocationClient.requestLocation();
- Logger.i("update the location");
- }
- }
- /**
- * 获取经纬度信息
- *
- * @return
- */
- public SItude getLocation() {
- return station;
- }
- private static class MyBDListener implements BDLocationListener {
- @Override
- public void onReceiveLocation(BDLocation location) {
- if (location.getCity() == null) {
- int type = mLocationClient.requestLocation();
- Logger.e("first request false" + type);
- }
- station.latitude = location.getLatitude();
- station.longitude = location.getLongitude();
- }
- @Override
- public void onReceivePoi(BDLocation arg0) {
- // return
- }
- }
- }
在使用的时候,在一开始就开启LocationClient,即调用startLocation()方法。我的是在服务服务中的onCreate中调用的,然后在代码中这样使用:
- LocationInfo.SItude station = location.getLocation();
- if (station.latitude == 0.0 && station.longitude == 0.0) {
- location.updateListener();
- station = location.getLocation();
- }
- if (station.latitude == 0.0 && station.longitude == 0.0) {
- return "未定位到您现在的位置,请重试";
- }
- location.stopListener();
使用上面的方法后,第一次使用都能拿到位置信息。
Android使用百度定位SDK方法及错误处理的更多相关文章
- Android使用百度定位SDK 方法及错误处理
之前我的项目中的位置定位使用的是基站方法,使用的Google提供的API,但是前天中午突然就不返回数据了,到网上搜了一下才知道,Google的接 口不提供服务了,基于时间紧迫用了百度现有的SDK,但是 ...
- Android 百度定位SDK
原文:Android 百度定位SDK 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/shui1025701856/article/details/7 ...
- 百度定位SDK:弥补Android基站WIFI定位缺失
http://tech.qq.com/a/20120524/000347.htm 如今,基于位置信息的移动应用越来越多,从餐饮.购物等本地生活服务,到定向广告的匹配.移动社交网络的构建,LBS类应用的 ...
- android中使用百度定位sdk实时的计算移动距离
; //5秒刷新一次 private Handler refreshHandler = new Handler(){ //刷新界面的Handler public void handleMessag ...
- 百度定位SDK实现获取当前经纬度及位置
使用Android自带的LocationManager和Location获取位置的时候,经常会有获取的location为null的情况,并且操作起来也不是很方便,在这个Demo里我使用了百度地图API ...
- Android studio百度地图demo出现230错误,key校验失败
转自daoxiaomianzi原文 Android studio 百度地图demo出现230错误,key校验失败 使用AndroidStudio导入Baidu地图的as版的demo,引入后,发现没有k ...
- 百度定位SDK 返回error code : 162 latitude : 4.9E-324 lontitude : 4.9E-324
Android应用使用百度定位SDK 返回error code : 162 latitude : 4.9E-324 lontitude : 4.9E-324 在使用百度定位SDK时遇到一个非常郁闷的问 ...
- android使用百度地图SDK获取定位信息
本文使用Android Studio开发. 获取定位信息相对简单.我们仅仅须要例如以下几步: 第一步,注冊百度账号,在百度地图开放平台新建应用.生成API_KEY.这些就不细说了,请前往这里:titl ...
- xamarin.android 绑定百度地图SDK遇到的问题
在 xamarin.android 绑定项目中,绑定 百度地图的LBS地图SDK,参考 https://developer.xamarin.com/guides/android/advanced_to ...
随机推荐
- Swift - 移除页面视图上的所有元素
下面代码可以遍历移除页面视图上的所有元件 1 2 3 4 5 6 //清空所有子视图 func clearViews() { for v in self.view.subviews as [U ...
- DB2错误码解释对照
表 2. SQLSTATE 类代码 类 代码 含义 要获得子代码, 参阅... 00 完全成功完成 表 3 01 警告 表 4 02 无数据 表 5 07 动态 SQL 错误 表 6 ...
- 近期在调用 calendar.js 的时候出现中文乱码! 解决方式
近期写一个小项目的时候:在调用 calendar.js 的时候出现中文乱码! 如图所看到的: 原因在于: 我的jsp 页面,指定的是 UTF-8 编码,然而,调用的 calendar.js 的编码确 ...
- 《转》Python多线程学习
原地址:http://www.cnblogs.com/tqsummer/archive/2011/01/25/1944771.html 一.Python中的线程使用: Python中使用线程有两种方式 ...
- 使用ffmpeg 对视频截图,和视频转换格式
//执行CMD命令方法 public static void CmdProcess(string command)//调用CMD { //实例化一个进程类 ...
- Android万能适配器base-adapter-helper的源代码分析
项目地址:https://github.com/JoanZapata/base-adapter-helper 1. 功能介绍 1.1. base-adapter-helper base-adapter ...
- SPOJ PGCD(莫比乌斯反演)
传送门:Primes in GCD Table 题意:给定两个数和,其中,,求为质数的有多少对?其中和的范围是. 分析:这题不能枚举质数来进行莫比乌斯反演,得预处理出∑υ(n/p)(n%p==0). ...
- iPhone、iPad强制关机
情景:iPad測试应用过程中死机了. 解决:同一时候按住右上方的电源键和屏幕下方的HOME键大约10秒左右. 就会自己主动强制断电关机,然后重新启动. 强制重新启动后你会看到进入苹果的标志,然后进入主 ...
- Hermes和开源Solr、ElasticSearch
不同
Hermes和开源Solr.ElasticSearch不同 谈到Hermes的索引技术.相信非常多同学都会想到Solr.ElasticSearch.Solr.ElasticSearc ...
- 【译】ASP.NET MVC 5 教程 - 8:搜索查询
原文:[译]ASP.NET MVC 5 教程 - 8:搜索查询 添加一个搜索的方法和搜索的视图 在本节中,我们为 Index 方法添加查询功能,使我们能够根据电影的题材或名称进行查找. 修改 Inde ...