下面事例是使用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)

②然后复制

  1. <service android:name="com.baidu.location.f" android:enabled="true"
  2. android:process=":remote" android:permission="android.permission.BAIDU_LOCATION_SERVICE">
  3. <intent-filter>
  4. <action android:name="com.baidu.location.service_v2.6"></action>
  5. </intent-filter>
  6. </service>

到manifest的application节点。

接下来复制百度地位SDK需要的permission

  1. <permission android:name="android.permission.BAIDU_LOCATION_SERVICE"></permission>
  2. <uses-permission android:name="android.permission.BAIDU_LOCATION_SERVICE">
  3. </uses-permission>
  4. <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION">
  5. </uses-permission>
  6. <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION">
  7. </uses-permission>
  8. <uses-permission android:name="android.permission.ACCESS_WIFI_STATE">
  9. </uses-permission>
  10. <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE">
  11. </uses-permission>
  12. <uses-permission android:name="android.permission.CHANGE_WIFI_STATE">
  13. </uses-permission>
  14. <uses-permission android:name="android.permission.READ_PHONE_STATE">
  15. </uses-permission>
  16. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE">
  17. </uses-permission>
  18. <uses-permission android:name="android.permission.INTERNET" />
  19. <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS">
  20. </uses-permission>
  21. <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秒一次。

  1. import android.content.Context;
  2. import com.baidu.location.BDLocation;
  3. import com.baidu.location.BDLocationListener;
  4. import com.baidu.location.LocationClient;
  5. import com.baidu.location.LocationClientOption;
  6. import com.palmdeal.entity.LocationInfo.SItude;
  7. import com.palmdeal.util.Logger;
  8. public class LocationProvider {
  9. private static LocationClient mLocationClient = null;
  10. private static SItude station = new SItude();
  11. private static MyBDListener listener = new MyBDListener();
  12. Context context;
  13. public LocationProvider(Context context) {
  14. super();
  15. this.context = context;
  16. }
  17. public void startLocation() {
  18. mLocationClient = new LocationClient(context);
  19. LocationClientOption option = new LocationClientOption();
  20. option.setOpenGps(true); // 打开gps
  21. option.setCoorType("bd09ll"); // 设置坐标类型为bd09ll
  22. option.setPriority(LocationClientOption.NetWorkFirst); // 设置网络优先
  23. option.setProdName("demo"); // 设置产品线名称
  24. mLocationClient.setLocOption(option);
  25. mLocationClient.registerLocationListener(listener);
  26. mLocationClient.start();//将开启与获取位置分开,就可以尽量的在后面的使用中获取到位置
  27. }
  28. /**
  29. * 停止,减少资源消耗
  30. */
  31. public void stopListener() {
  32. if (mLocationClient != null && mLocationClient.isStarted()) {
  33. mLocationClient.stop();
  34. mLocationClient = null;
  35. }
  36. }
  37. /**
  38. * 更新位置并保存到SItude中
  39. */
  40. public void updateListener() {
  41. if (mLocationClient != null && mLocationClient.isStarted()) {
  42. mLocationClient.requestLocation();
  43. Logger.i("update the location");
  44. }
  45. }
  46. /**
  47. * 获取经纬度信息
  48. *
  49. * @return
  50. */
  51. public SItude getLocation() {
  52. return station;
  53. }
  54. private static class MyBDListener implements BDLocationListener {
  55. @Override
  56. public void onReceiveLocation(BDLocation location) {
  57. if (location.getCity() == null) {
  58. int type = mLocationClient.requestLocation();
  59. Logger.e("first request false" + type);
  60. }
  61. station.latitude = location.getLatitude();
  62. station.longitude = location.getLongitude();
  63. }
  64. @Override
  65. public void onReceivePoi(BDLocation arg0) {
  66. // return
  67. }
  68. }
  69. }

在使用的时候,在一开始就开启LocationClient,即调用startLocation()方法。我的是在服务服务中的onCreate中调用的,然后在代码中这样使用:

  1. LocationInfo.SItude station = location.getLocation();
  2. if (station.latitude == 0.0 && station.longitude == 0.0) {
  3. location.updateListener();
  4. station = location.getLocation();
  5. }
  6. if (station.latitude == 0.0 && station.longitude == 0.0) {
  7. return "未定位到您现在的位置,请重试";
  8. }
  9. location.stopListener();

使用上面的方法后,第一次使用都能拿到位置信息。

http://mobile.51cto.com/aprogram-376690.htm

Android使用百度地图定位的更多相关文章

  1. Android使用百度地图定位并显示手机位置后使用前置摄像头“偷拍”

    今天老板让我验证一下技术可行性,记录下来. 需求 :定位手机的位置并在百度地图上显示,得到位置后使用前置摄像头进行抓拍 拿到这个需求后,对于摄像头的使用不太熟悉,于是我先做了定位手机并在百度地图上显示 ...

  2. android中百度地图定位的实现方法(仅适用于真机+WIFI联网环境)

    注意:此代码的环境是:真机(系统版本为Android4.2.2)+WIFI联网(才能实现最后的运行结果):使用虚拟机调试会出现各种问题. 第一步:下载SDK和申请Key 到百度的网站http://de ...

  3. Android利用百度地图定位

    百度地图照着百度的教程做的总是出现报错 请帮我看看错误在那 2013-12-13 15:16168海军 | 分类:百度地图 | 浏览1252次 java.lang.RuntimeException: ...

  4. Android使用百度地图出现闪退及定位时显示蓝屏问题

     目录 1.Android使用百度地图出现闪退 2.Android使用百度地图定位出现蓝屏问题     1.Android使用百度地图出现闪退 一般情况下出现闪退是在AndroidManifest.x ...

  5. Android 百度地图定位(手动+自动) 安卓开发教程

    近由于项目需要,研究了下百度地图定位,他们提供的实例基本都是用监听器实现自动定位的.我想实现一种效果:当用户进入UI时,不定位,用户需要定位的时候,自己手动点击按钮,再去定位当前位置.  经过2天研究 ...

  6. Android studio 百度地图开发(2)地图定位

    Android studio 百度地图开发(2)地图定位 email:chentravelling@163.com 开发环境:win7 64位,Android Studio,请注意是Android S ...

  7. 百度地图定位SDK 之构想

    百度地图定位 前提 从香港旅游回来,心中油然升起一股热血滂湃,激励自己发现市场需求,向创业奋进,朝着梦想前进. 简介 百度Android定位SDK支持Android1.5以及以上设备,提供: 定位功能 ...

  8. Android studio 百度地图开发(3)地图导航

    Android studio 百度地图开发(3)地图导航 email:chentravelling@163.com 开发环境:win7 64位,Android Studio,请注意是Android S ...

  9. IOS中使用百度地图定位后获取城市坐标,城市名称,城市编号信息

    IOS中使用百度地图定位后获取城市坐标,城市名称,城市编号信息 /**当获取到定位的坐标后,回调函数*/ - (void)didUpdateBMKUserLocation:(BMKUserLocati ...

随机推荐

  1. Android Studio 遇见的第一个Error

    最近在国内多次尝试在Eclipse下更新SDK无果后,最后终于通过FQ后结束了Google服务器无法访问的噩梦. 顺着墙外的梯子,一并下载Google的Android Studio尝鲜,安装成功后,就 ...

  2. N - Optimal Milking - POJ 2112(二分图多重匹配+Floyd+二分搜索)

    题意:有K太挤奶机,C头奶牛,每个挤奶机每天只能为M头奶牛服务,下面给的K+C的矩阵,是形容相互之间的距离,求出来走最远的那头奶牛要走多远 分析:应该先使用floyd求出来点之间的最短路??(不晓得给 ...

  3. MVC控制器方法返回类型

    控制器公开控制器操作.操作是控制器上的方法,在浏览器的地址栏中输入特定 URL 时被调用.例如,假设要请求下面的 URL: http://localhost/Product/Index/3 在这种情况 ...

  4. java中的Package语句和import语句

    在实际项目中会有成百上千个类,我们把近似的类放在同一个包里面,比如把实体类放在实体类包里面   package 为解决类的 命名冲突问题而引入的机制. package语句作为Java源文件的第一条语句 ...

  5. Apache服务器 配置多个网站解决方案

    2016.5.28   今周六   下午   阴     无风 周末接了个小单,弄一个企业站,用php语言:于是又要拿起好久没动的php啦! 关键第一步是搭建Apache环境,在这里本人用的是wamp ...

  6. Android控件Editext、TextView属性详解

    EditText属性描述 android:layout_gravity="center_vertical"//设置控件显示的位置:默认top,这里居中显示,还有bottom and ...

  7. hduTHE MATRIX PROBLEM(差分约束)

    题目请戳这里 题目大意:给一个n*m的矩阵,求是否存在这样两个序列:a1,a2...an,b1,b2,...,bm,使得矩阵的第i行乘以ai,第j列除以bj后,矩阵的每一个数都在L和U之间. 题目分析 ...

  8. Apache Shiro 使用手冊 链接文件夹整理

    1.Apache Shiro 使用手冊(一)Shiro架构介绍 2.Apache Shiro 使用手冊(二)Shiro 认证 3.Apache Shiro 使用手冊(三)Shiro 授权 4.Apac ...

  9. 要缩小通过两个触摸点的观点(iOS)

    于AppDelegate.m档,创建一个视图控制器 #import "MAYAppDelegate.h" #import "MAYViewController.h&quo ...

  10. ajax_post方式

    test_ajax_post.html <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" &quo ...