android手机定位

上传人:小** 文档编号:38343454 上传时间:2021-11-06 格式:DOC 页数:6 大小:104.50KB
收藏 版权申诉 举报 下载
android手机定位_第1页
第1页 / 共6页
android手机定位_第2页
第2页 / 共6页
android手机定位_第3页
第3页 / 共6页
资源描述:

《android手机定位》由会员分享,可在线阅读,更多相关《android手机定位(6页珍藏版)》请在装配图网上搜索。

1、an droid手机定位做移动互联网就不太可能不碰手机端的开发。上周为了项目需要,俺也挽袖子抡胳膊开始写起了 an droid程序,还好有java基础,倒也上手快,写了几个小程序,主要都是关于定位方 面的。网上也搜得到一些相关的文章和教程,但给出的例子效果不太好,而且感觉只有其表,却不明其理。因此写出此文,分享一些我的经验。虽然是以an droid为主,但是我想对其它平台的开发也应该有些帮助。这篇文章侧重于制定一个合理的定位方案。手机定位的方式先科普一些基础知识吧。最简单的手机定位方式当然是通过GPS模块(现在大部分的智能机应该都有了)。GPS方式准确度是最高的,但是它的缺点也非常明显:1,比

2、较耗 电;2,绝大部分用户默认不开启GPS模块;3,从GPS模块启动到获取第一次定位数据,可能需要比较长的时间;4,室内几乎无法使用。这其中,缺点2,3都是比较致命的。需要指出的是,GPS走的是卫星通信的通道,在没有网络连接的情况下也能用。另外一种常见的定位方式是基站定位。大致思路就是采集到手机上的基站ID号(eellid)和其它的一些信息(MNC,MCC,LAC等等),然后通过网络访问一些定位服务,获取并 返回对应的经纬度坐标。基站定位的精确度不如GPS,但好处是能够在室内用,只要网络通畅就行。还有Wifi定位。和基站定位类似,这种方式是通过获取当前所用的wifi的一些信息,然后访问网络上的

3、定位服务以获得经纬度坐标。因为它和基站定位其实都需要使用网络,所以在An droid也统称为 Network方式。最后需要解释一点的是 AGPS方式。很多人将它和基站定位混为一谈,但其实AGPS的本质仍然是GPS,只是它会使用基站信息对获取 GPS进行辅助,然后还能对获取到的 GPS结 果进行修正,所以 AGPS要比传统的GPS更快,准确度略高。Android提供的定位接口在写第一个程序之前,我对an droid的幻想是这样的:提供了一个函数,能够让我直接从 GPS 模块中读取经纬度坐标,还有一个函数,能够直接访问网络,获得基站定位的结果。所以, 我只需要调用调用函数就可以搞定这一切。现实和理

4、想总是有很大的差距。An droid上的开发完全不是这么回事儿。前面提到过,GPS模块从启动到获取数据之间时间会比较长,可能有23分钟时间,所以,如果真有这么一个函数,那么你的程序可能会被这个函数阻塞几分钟。我想正是基于这样的考虑,an droid上要想获取定位信息,必须使用异步方式。代码大概是这个样子:01 locManager = (LocationManager) this.getSystemService(Context.LOCA TION_SERVICE);02 locListe ner = new Locati on Liste ner() 03Override04public v

5、oid on StatusCha nged(Stri ng provider, i nt status,05Bun dle extras) 06/ TODO Auto-ge nerated method stub0708Override09public void on ProviderE nabled(Stri ngprovider) / TODO Auto-ge nerated methodstub1011 12 Override13 publicvoid onProviderDisabled(Stringprovider) 14 / TODO Auto-ge nerated method

6、stub15 16 Override17 public void on Locati on Cha nged(Locati on locati on) 18 / TODO Auto-ge nerated method stub19 mobileLocati on = locati on;20 21 ;22 locMa nager.requestLocatio nU pdates(Locatio nMan ager.GPS_PROVIDER, 0, 0, locListe ner);这是从网上随便摘一段。简单解释一下代码:首先,你需要创建一个Locatio nMan ager;然后定义出自己的L

7、ocationListener,LocationListener包涵了好几个成员函数,它们都是回调函数。最重要的一个是“ on Locatio nCha nged;这个函数是在 an droid获取了新的location信息之后调用的,你可以在这个函数内来实现自己想要的功能。比如,你可以定义一个内部location变量,一旦这个函数被调用,就将内部location变量设置成最新的值;最后,调用 LocationManager.requestLocastionUpdates,它其实是将定义的locationListener注册到 an droid中。在上面的代码中,这句话是说让 Locatio

8、nListe ner监听GPS_PROVIDER 的 变化。GPS_PROVIDER 对应于 an droid上 的 GPS模块获取 位置 信息,还有一个 NETWORK_PROVIDER 表示通过network方式获取位置信息。问题那么接下来就有问题了,什么时候能够真正获得手机的定位经纬度呢?等着 on Locati on Cha nged被调用吧。那它什么时候会被调用?没人知道。我写过一个小程序,测试 Network 方式下注册过 liste ner 之后 (requestLocati on Updates 函数)禾口 on Locati on Cha nged 被调用之间的时间间隔。测试

9、的网络条件很好。反复观察了几次,大部分都可以在几十毫秒内就返回了,但也有一些时候,时间间隔长达几十秒。这意味着,你的用户需要等上几十秒才能有返回。所以,第一个需要注意的地方是,不要一直等待你的回调函数onLocationChanged被调用。你需要设置一个timeout机制。这又会引入第二个问题。如果timeout 了,但onLocationChanged仍然没有返回,怎么办?难道只能提示用户无法定位吗?别急,an droid还提供了一个函数:getlastK no wLocatio n。这个函数会返回an droid平台最后一次获取到的位置信息。比如,你可以这样:view pla in co

10、py to clipboardpri nt?1 Locati onlastK nown Locatio n=locatio nMan ager.getLastK nown Locatio n(Locatio nMan ager.GPS_PROVIDER);所以,即便on Locati on Cha nged没有被调用,我们仍然可以获取一个位置信息。当然,这里又引出了第三个问题:这个的返回值值得信赖吗?如果用过一些 LBS或者地图程序,你会发现有一个现象:在某些时候你打开地图结果被定 位到的地方是你上一次使用地图程序的位置。这就是因为程序是采 用 getLastKnownLocation获取的位

11、置。这个问题的解决办法是,需要定义一个标准判断获取到的Locatio n是否可信。An droid的Locatio n这个类除了包涵有 latitude,lo ngitude,还包含有序员完全可以基很多其他的信息,比如何时获取到的,通过哪种方式获取到的,等等。程 于这些信息来判断获取到的Location是否过时或者是否可信。合理的方案最后,说一下整体方案。An droid的官方文档【1】给出了推荐的方案:Listen forCactied GPSlocation nGPS andIo sati on iwdue toNetwareaslarger err itStop listeningtOQ

12、 Qkjestimate sfar updatesApplication startsCached networkretrieved忖 ewUeIMD hx i$ recervedA WFi-based lacabon rs obtainedA GPS tocabcn replaces current best csimateBes! e Simaie of the kxstjon 借 u&ed in applicationTinw (t)首先注册自己的Locati on Liste ner,让它同时监听GPS_PROVIDER 和NETWORKPROVIDER ;然后可以调用 getLast

13、KnownLocation获得一个Location值,这个值可以作为一个备选值; 然后在一段用户可接受的时间内,不断接收从onLocationChanged返回的位置,并同之前的值做比较,选取其中的最佳;最后,会剩下一个筛选后的最优结果,你需要判断这个结果是否可接受。如果可以接受,返回给用户,如果不行,告诉用户无法定位。整个过程你需要定义两个重要的函数:一个是比较两个Location信息,返回其中好的那个;另一个函数则用来判断 Location信息是否可以被接受。目前手机上被广泛使用的移动定位技术有三种:基于网络的小区识别定位、集成GPS定位和A-GPS定位。一、基于网络即小区识别定位技术。G

14、SM移动通信网络是由许多像蜂窝一样的小区构成的,每个小区都有自己的编号,由于手机通讯遵循蜂窝技术规范,因此只要手机不是离线模式,手机位于哪个小区就很容易知道,这种定位精度取决于移动终端所处蜂窝小区半径的大小,从几百米到几十公里不等,与其它技术相比,该技术精度最低,而且还会收取一定的月功能使 用费。二、集成GPS即美国go-vern-ment提供的全球定位系统。24颗GPS卫星分布在6个道平面上,距离地面1万2千公里,以12小时的周期环绕地球运行,使得任意时刻地面上任意点都可以观测到4颗以上的卫星。集成 GPS定位需要手机内置 GPS模块,但该模块只有接收功能,没有 发射功能。24颗GPS卫星不

15、断向地球发射着包含时间、卫星点位等重要参数的信息,被我 们的手机收到后,手机会利用多个卫星的同一时间发出的信号到达的先后顺序及时差计算出 手机到各个卫星的距离,然后利用三维坐标中的距离公式,利用3颗卫星组成3个方程式,解算出手机的位置(X,Y,Z)。考虑到卫星时钟与手机时钟之间的误差,实际上有4个未知数,X、Y、Z和钟差,因而需要引入第 4颗卫星,形成4个方程式进行求解,从而得到手机的经纬度 和高程。事实上,手机往往可以锁住4颗以上的卫星,这时,手机可按卫星的星座分布分成若干组,每组4颗,然后通过算法挑选出误差最小的一组用作定位。三、辅助GPS即Assist GPS,简称A-GPS,是网络辅助

16、的全球定位系统,这种方法实际就是”小区识别定位+集成GPS定位+远端数据计算 + GPRS信息传输。辅助GPS定位需要移动运营商 提供其移动通信信号塔的 GPS位置,并在移动网络上加建位置服务器,还需要在地面建设GPS基准站(用于实时观测卫星并向定位服务器提供全球实时星历数据)。辅助GPS定位过程如下:1、 手机将距离最近的移动通信信号塔的GPS位置通过网络传输到位置服务器;2、位置服务器(由GPS基准站提供全球即时星历数据 )根据移动通信信号塔的 GPS位置传输 该信号塔(近似手机位置)当前上空的GPS星历信息到手机,这些信息将暂时保存在手机内存 的特定位置(星历缓存);3、 手机从星历缓存

17、读取数据并接收指定几颗卫星的信号(省去了繁重的信号接收、数据计算 和筛选最优卫星分组等工作 );4、 手机接收到指定几颗卫星的信号后,参考星历缓存中的位置信息(主要是仰角)校核计算出手机当前的位置,然后在屏幕上显示出来(警告:如果此时上空没有指定卫星信号(比如手机位于室内),则会从第1步往下重复,请小心你的流量);5、手机随时间的变化(时间变化造成卫星偏移)和位置的移动(位置移动造成仰角改变)自动选 择卫星,实时刷新星历缓存;6、手机重复第3、第4和第5步骤。7、 其他重要环节的说明:.如果手机有过一次成功定位,那么手机内存中就会有一个星历缓存,其中保存着上次的定位信息,退出定位软件也不会丢失

18、,但一关机就没了。每次启动GPS后,模块首先读取星历缓存,然后尝试上次定位的卫星信号,接着会有两种情况:.如果存在上次定位的卫星信号,则会立刻定位,屏幕不出现连网提示符,这就是为什么相对上次定位时间间隔和位置移动不大时一打开定位软件就能定位的原因;b.如果不存在上次定位的卫星信号,则星历缓存失效,手机从第1步开始重做所有步骤,屏幕出现连网提示符。四、手机GPS模块概述(一) GPS模块由信号接收硬件和数据处理软件两部分组成。数据处理软件是固化在 主板芯片中的,跟电脑的 BIOS 样,介于软件与硬件之间,说它软是因为通过特殊设备可 以刷写它,说它硬是因为一般用户根本动不了它。A-GPS与纯GPS

19、的不同之处,就是A-GPS比纯GPS在数据处理软件上多了一段联网获取辅助数据的程序。GPS的工作过程概括如下(3、4部分为A-GPS的特色任务,设置中不勾选A-GPS或者由星历缓存锁定卫星成功后将不被执行):1、读取手机内存中的星历缓存 (上次的定位信息);2、锁定卫星并接收信号;3、 调用移动通讯网络将当前通讯基站的GPS位置发送给专业定位服务器;4、 接收专业定位服务器发来的当前通讯基站当前上空的GPS星云数据并写入手机内存中的 星历缓存;5、校核仰角并计算显示;、自主选星并刷新缓存(退出定位也不会丢失);7、重复第1、2、5、6步骤。(二)修改系统参数(实际是服务器地址)的方法能提高gp

20、s定位速度实际是提高 A-GPS 定位速度,只是把国外的服务器换成中国服务器而已,实际并不能提高单纯用 gps定位的速度,gps定位的速度排除位置原因导致的卫星信号强度变化外,实际只和天线的接受能力以 及芯片的处理能力有关,必须注意的是,GPS模块的数据处理软件部分位于专门的芯片中,并不在系统ROM中,因此通过DIY固件的方法也无法修改看了这些,我想大家不要纠结于什么rom定位快,什么rom定位慢的问题了,就算是速度上有影响,也是关于 AGPS服务器地址的设置不同,如果不开辅助定位的话,理论上,同一位置冷启动定位速度相同,当然,卫星信号在传播过程中受到的影响很多,卫星的位置、大气密度、空气质量

21、、电离层反射、折射、衍射等等都会对无线电波的传播产生影响,所以 在相同地点不同时间定位速度也不可能相同。另外就是有些同学说过的秒定, 这个现象我也能做到,深入的我没有研究过,但是和我 用的其他系统的手机比较,我感觉这个情况应该是导航软件或者安卓系统对gps所做的一个优化设计,和热启动的原理差不多, 如果是距离上次距离很远, 定位时间间隔比较长, 并且 期间gps 一直没有打开,关闭网络辅助的情况下 (真正的冷启动),定位能在1分钟之内完成 就很值得庆幸了。另外就是D2G这个手机本身情况也不同,就像有的同学手机信号好,不跳水,有的重 启有的不重启一样,对于 gps信号的接收能力各个机器也可能不同,所以定位表现也不同, 这个帖子的目的就是让大家了解一下原理,真正能不能起到提高的作用,我没有办法,毕竟这个手机还不是专业的 gps接收机也不是专业的导航手机,表现的再好也是有限度的。最后就是关于 D2G的定位表现,从我的手机上看,接收信号能力和搜星能力都还不错, 但是对于信号要求稍微高一点,经常是很快能搜到4颗以上的卫星,但是信号强度都达不到定位的阀值要求,要等一会才行。关闭gps,地点移动不大,间隔时间不长的情况下,热启动基本能做到秒定。总体上和我另外一部WM系统的garmin-asus M10的gps比稍有差距,但是作为一个非专业 gps手机来讲不错了。

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!