Android 手机定位慢的解决方法

做移动互联网就不太可能不碰手机端的开发。上周为了项目需要,俺也挽袖子抡胳膊开始写起了android程序,还好有java基础,倒也上手快,写了几个小程序,主要都是关于定位方面的。
网上也搜得到一些相关的文章和教程,但给出的例子效果不太好,而且感觉只有其表,却不明其理。因此写出此文,分享一些我的经验。虽然是以android为主,但是我想对其它平台的开发也应该有些帮助。

这篇文章侧重于制定一个合理的定位方案。

手机定位的方式 
先科普一些基础知识吧。

最简单的手机定位方式当然是通过GPS模块(现在大部分的智能机应该都有了)。GPS方式准确度是最高的,但是它的缺点也非常明显:1,比较耗电;2,绝大部分用户默认不开启GPS模块;3,从GPS模块启动到获取第一次定位数据,可能需要比较长的时间;4,室内几乎无法使用。这其中,缺点2,3都是比较致命的。需要指出的是,GPS走的是卫星通信的通道,在没有网络连接的情况下也能用。
另外一种常见的定位方式是基站定位。大致思路就是采集到手机上的基站ID号(cellid)和其它的一些信息(MNC,MCC,LAC等等),然后通过网络访问一些定位服务,获取并返回对应的经纬度坐标。基站定位的精确度不如GPS,但好处是能够在室内用,只要网络通畅就行。
还有Wifi定位。和基站定位类似,这种方式是通过获取当前所用的wifi的一些信息,然后访问网络上的定位服务以获得经纬度坐标。因为它和基站定位其实都需要使用网络,所以在Android也统称为Network方式。
最后需要解释一点的是AGPS方式。很多人将它和基站定位混为一谈,但其实AGPS的本质仍然是GPS,只是它会使用基站信息对获取GPS进行辅助,然后还能对获取到的GPS结果进行修正,所以AGPS要比传统的GPS更快,准确度略高。

Android提供的定位接口 
在写第一个程序之前,我对android的幻想是这样的:提供了一个函数,能够让我直接从GPS模块中读取经纬度坐标,还有一个函数,能够直接访问网络,获得基站定位的结果。所以,我只需要调用调用函数就可以搞定这一切。
现实和理想总是有很大的差距。Android上的开发完全不是这么回事儿。前面提到过,GPS模块从启动到获取数据之间时间会比较长,可能有2~3分钟时间,所以,如果真有这么一个函数,那么你的程序可能会被这个函数阻塞几分钟。我想正是基于这样的考虑,android上要想获取定位信息,必须使用异步方式。

代码大概是这个样子:

01   locManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);    

02   locListener = new LocationListener() {    

03       @Override    

04       public void onStatusChanged(String provider, int status,    

05               Bundle extras) {    

06           // TODO Auto-generated method stub    

07       }    

08       @Override    

09       public void onProviderEnabled(String provider) {    

10           // TODO Auto-generated method stub    

11       }    

12       @Override    

13       public void onProviderDisabled(String provider) {    

14           // TODO Auto-generated method stub    

15       }    

16       @Override    

17       public void onLocationChanged(Location location) {    

18           // TODO Auto-generated method stub    

19           mobileLocation = location;    

20       }    

21   };    

22   locManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locListener);  

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wwjxpd.html