天天看点

[android] 百度地图开发 (三).定位当前位置及getLastKnownLocation获取location总为空问题

of interest)搜索。该篇讲述定位当前自己的位置及使用getlastknownlocation获取location总时为空值的问题。

      定位当前位置可以通过lbs(location based service,基于位置的服务),主要工作原理是利用无线网络network或gps定位方式确定移动设备所在的位置。

      其基本步骤如下:(参考郭神《android第一行代码》)

      1.先实例locationmanager,getsystemservice(context.location_service)再确定获取系统的定位服务;

      2.选择位置提供器,通常会使用locationmanager.network_provider网络定位(精准度差、耗电少)或locationmanager.gps_provider实现gps定位(精准度高、耗电多);

      3.然后通过locationmanager的getlastknownlocation()函数,它选择位置提供器provider得到location对象;

      4.此时你已经获取了地理位置,如果手机移动可以通过locationmanager的另一个函数requestlocationupdates()方法获取动态的位置信息;

      5.获取当前location后需要加载到百度地图中,可以通过geopoint设置当前位置经度和纬度,并使用mylocationoverlay载入该数据及添加当前位置覆盖物。

      其核心代码如下所示:

     运行效果如下图所示:

[android] 百度地图开发 (三).定位当前位置及getLastKnownLocation获取location总为空问题
[android] 百度地图开发 (三).定位当前位置及getLastKnownLocation获取location总为空问题

      但是此时你可能会遇到两个问题:

      第一个问题是有时候百度地图不能定位到当前位置,究其原因我发现代码获取的location总为空值,即:

      location location = locationmanager.getlastknownlocation(provider);

      第二个问题就是在能定位当前位置的情况下,获取的位置总是存在偏移,向左下方偏移一定方位。

      其中第一个问题在getlastknownlocation(provider)总是获取null,据说是该函数获取的是上一次location,而且它不是一次就能定位成功的,需要多次定位才能实现。通过在getlastknownlocation()函数后添加循环多次定位如下代码:

     但是很遗憾的是我采用这种方法并没有解决该问题,这就引出了“三.定位当前位置(源码)”内容。通过另外一种百度地图获取当前位置的方法实现,通过设置locationclient获取,而且能解决这里提到的两个问题且相对精确的实现定位。

     此种方法参考xiaanming大神的博客,推荐大家阅读,讲述的非常好尤其是其实现细节,我主要是阐述该问题及提供一个可行方法罢了。

     主要通过locsdk的locationclient实现显示当前位置,同时此种方法如果遇到没有显示地图。其原因是:首先需要在androidmanifest.xml中添加如下代码。

      1.运行效果如下图所示。

      它能获取当前位置,并且通过监听函数5秒间隔获取一次;

      public class bdlocationlistenerimpl implements bdlocationlistener

      在监听函数中富国flag!=1表示没有点击“定位”按钮则不实现监听定位当前位置功能;同时结合前面第二篇文章poi搜索及城市定位功能。

[android] 百度地图开发 (三).定位当前位置及getLastKnownLocation获取location总为空问题
[android] 百度地图开发 (三).定位当前位置及getLastKnownLocation获取location总为空问题
[android] 百度地图开发 (三).定位当前位置及getLastKnownLocation获取location总为空问题
[android] 百度地图开发 (三).定位当前位置及getLastKnownLocation获取location总为空问题
[android] 百度地图开发 (三).定位当前位置及getLastKnownLocation获取location总为空问题
[android] 百度地图开发 (三).定位当前位置及getLastKnownLocation获取location总为空问题

      2.注意需要引入sdk包括locsdk_3.1.jar和liblocsdk3.so,其工程结构如下所示:

[android] 百度地图开发 (三).定位当前位置及getLastKnownLocation获取location总为空问题

      3.mainactivity.java文件

     4.布局文件activity_main.xml,同时添加图片left.png、middle.png和right.png

      5.设置androidmainfest.xml权限及服务,同时设置百度地图apikey,第一篇文章有详细讲述。

      最后希望文章对大家有所帮助,刚刚接触android开发百度地图,而且还是使用v2.4.1版本,如果有错误或不足之处,还请海涵!建议大家看看官方文档和百度提供的demo.文章主要参考百度官方文档、xiaanming大神博客和郭神《android第一行代码》及我前面的两篇文章.