为什么手机在用数据手机gps不能定位位呢?

14659人阅读
android(59)
做移动互联网就不太可能不碰手机端的开发。上周为了项目需要,俺也挽袖子抡胳膊开始写起了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上要想获取定位信息,必须使用异步方式。
代码大概是这个样子:
locManager = (LocationManager)
this.getSystemService(Context.LOCATION_SERVICE);&&
locListener = new
LocationListener() {&&
&&& @Override
&&& public
void onStatusChanged(String provider,
int status, Bundle extras) {&&
&&& @Override
&&& public
void onProviderEnabled(String provider) {&&
&&& @Override
&&& public
void onProviderDisabled(String provider) {&&
&&& @Override
&&& public
void onLocationChanged(Location location) {&&
&&&&&&& mobileLocation =&&
locManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,
0, 0, locListener);
这是从网上随便摘一段。简单解释一下代码:
首先,你需要创建一个LocationManager;
然后定义出自己的LocationListener,LocationListener包涵了好几个成员函数,它们都是回调函数。最重要的一个是“onLocationChanged”,这个函数是在Android获取了新的location信息之后调用的,你可以在这个函数内来实现自己想要的功能。比如,你可以定义一个内部location变量,一旦这个函数被调用,就将内部location变量设置成最新的值;
最后,调用LocationManager.requestLocastionUpdates,它其实是将定义的locationListener注册到Android中。在上面的代码中,这句话是说让LocationListener监听GPS_PROVIDER的变化。GPS_PROVIDER对应于android上的GPS模块获取位置信息,还有一个NETWORK_PROVIDER表示通过network方式获取位置信息。
那么接下来就有问题了,什么时候能够真正获得手机的 定位经纬度呢?等着onLocationChanged被调用吧。那它什么时候会被调用?没人知道。我写过一个小程序,测试Network方式下注册过 listener之后(requestLocationUpdates函数)和onLocationChanged被调用之间的时间间隔。测试的网络条件 很好。反复观察了几次,大部分都可以在几十毫秒内就返回了,但也有一些时候,时间间隔长达几十秒。这意味着,你的用户需要等上几十秒才能有返回。
所以,第一个需要注意的地方是,不要一直等待你的回调函数onLocationChanged被调用。你需要设置一个timeout机制。
这又会引入第二个问题。如果timeout了,但onLocationChanged仍然没有返回,怎么办?难道只能提示用户无法定位吗?
别急,Android还提供了一个函数:getlastKnowLocation。这个函数会返回android平台最后一次获取到的位置信息。比如,你可以这样:
Location lastKnownLocation = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);&
所以,即便onLocationChanged没有被调用,我们仍然可以获取一个位置信息。当然,这里又引出了第三个问题:这个的返回值值得信赖吗?
如果用过一些LBS或者地图程序,你会发现有一个现象:在某些时候你打开地图结果被定位到的地方是你上一次使用地图程序的位置。这就是因为程序是采 用getLastKnownLocation获取的位置。这个问题的解决办法是,需要定义一个标准判断获取到的Location是否可信。Android的Location这个类除了包涵有latitude,longitude,还包含有很多其他的信息,比如何时获取到的,通过哪种方式获取到的,等等。程序员完全可以基于这些信息来判断获取到的Location是否过时或者是否可信。
合理的方案
最后,说一下整体方案。Android的官方文档【1】给出了推荐的方案:
首先注册自己的LocationListener,让它同时监听GPS_PROVIDER和NETWORK_PROVIDER;
然后可以调用getLastKnownLocation获得一个Location值,这个值可以作为一个备选值;
然后在一段用户可接受的时间内,不断接收从onLocationChanged返回的位置,并同之前的值做比较,选取其中的最佳;
最后,会剩下一个筛选后的最优结果,你需要判断这个结果是否可接受。如果可以接受,返回给用户,如果不行,告诉用户无法定位。
整个过程你需要定义两个重要的函数:一个是比较两个Location信息,返回其中好的那个;另一个函数则用来判断Location信息是否可以被接受。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:200006次
积分:2290
积分:2290
排名:第12733名
原创:17篇
转载:73篇
评论:31条
(1)(2)(1)(6)(5)(5)(3)(3)(5)(11)(4)(13)(14)(8)(10)(1)后使用快捷导航没有帐号?
平板/笔记本
手机定位后点击“清除数据”还能定位到吗?
&略有小成&
来自:浏览器
手机定位后点击“清除数据”还能定位到吗?
找Q:,亲戚失踪就是他定位找到的.
width:100%">
&炉火纯青&
来自:浏览器
这是不可以的,清除数据后手机上已经没有了登陆过华为云服务的账号记录
width:100%">
&独步江湖&
来自:浏览器
定位不到了
width:100%">
&炉火纯青&
来自:浏览器
清除数据是恢复出厂设置了。所以是不能定位的了
width:100%">
&炉火纯青&
来自:浏览器
清除数据就相当于恢复出厂设置,定位不到了。
width:100%">
&炉火纯青&
来自:浏览器
清除数据后就不能定位了
width:100%">
&EMUI产品经理&
来自:浏览器
要记得定位之后再清除数据,日常通过云端做好数据同步,备份
注册华为帐号,激活华为会员,惊喜多多!!
width:100%">
&独步江湖&
来自:浏览器
清除了数据就无法定位了,可以先恢复数据,通常清除数据是最后一步操作
width:100%">
&独步江湖&
来自:浏览器
如果手机丢失,在定位到的时候,要先把数据备份好,千万别先去清除数据,否则连数据都备份不了,也定位不到,就惨了。
width:100%">
&炉火纯青&
来自:浏览器
楼主一定要先备份。然后在清除数据呀
width:100%">
申请成为热心花粉,满足热心花粉条件即可获得!http://cn./forum.php?mod=viewthread&tid=183642
1000万花粉
纪念花粉俱乐部注册花粉数超过1000万
【轻舞飞扬】【冬城故事】【北方看雪】【香港旅拍】【大海风景】【生命希望】
花粉客户端
Make it Possible
Make your device special
华为云服务
Huawei cloud services
音乐播放器
Huawei Music
Huawei Vmall
没有最新动态
关注花粉俱乐部
联系我们:
|关注花粉俱乐部:
Copyright (C)
华为软件技术有限公司 版权所有 保留一切权利智能手机确定位置的10种途径:定位结合数据 16:46:54&&&&&&来源:移动Labs编译 &&&&&&智能手机地理位置位置服务手机定位【摘要】现代智能手机的一个重要功能就是定位。与笨重的台式电脑、笔记本电脑、个人导航设备和平板电脑不同,智能手机可以更好地将定位功能和其他数据相结合,从而实现新的服务。&&&&&&& 现代智能手机的一个重要功能就是定位。与笨重的台式电脑、笔记本电脑、个人导航设备和平板电脑不同,智能手机可以更好地将定位功能和其他数据相结合,从而实现新的服务。  “这里涉及到游戏层面、社交层面和实用层面”,Current Analysis的分析师Avi Greengart说道。Greengart认为手机的定位功能停留在了第二个层面,它将定位和导航功能延伸到社交应用和其他应用上去了。而第三层面也许会给我们带来前所未有的功能。  和其他的数码技术一样,这些新功能有利也有弊。顾客特别担心隐私问题,当你的位置暴露后,你可能会有被跟踪或逮捕的危险,Electronic Frontier Foundation的高级技师Seth Schoen说道。如今很多用户在使用基于定位的服务时没有考虑不过其中的危险,比如服务供应商在法律诉讼时提供定位数据,或黑客从应用供应商那里窃取数据。  “这个转变了来得太快,以至于人们并没有彻底了解其中蕴含的危险”,Schoen说道,“大多数人都不清楚哪些是主动的定位服务,哪些又是被动的定位服务”。许多应用供应商都致力于长期的服务。你授权可以收集位置数据的应用数越大,其中存在的风险也就越大,所以消费者只有这么一个控制的手段。  现在至少有10种不同的系统可以使用手机的定位功能。大多数情况下,它们是组合使用的,当使用其中一个后,另一个的效果就会下降。  1、GPS  全球定位系统由美国国防部开发,并在上世纪90年代后期装载到手机上。它仍然是在室外进行手机定位的最著名的方法。GPS使用一个卫星群将地点和时间数据从太空直接发送到你的手机上。如果手机接收来自3个卫星的信号,那么它可以显示你在地图上的方位,如果手机可以接收4个卫星的信号,它还可以显示出你的海拔。其他国家也发展了他们自己类似GPS的系统,这些系统不与GPS相冲突,且能使室外定位更加容易。俄罗斯的GLONASS已经在运作,而中国的北斗正在实验。欧洲的Galileo和日本的Quasi-Zenith Satellite System也在开发中。手机芯片制造商正在开发可以使舵卫星更快地获取综合位置信息的处理器。  2、辅助GPS(Assisted GPS)  当你的手机找到3或4个卫星时,GPS会运作地很好,但当你在室内,或处于反射卫星信号的“城市峡谷”中时,它花费的时间会很长或根本无法用。辅助GPS就带有一系列帮助解决这个问题的工具。GPS等待时间长的一个原因是当手机找到卫星时,它需要下载卫星在其后4个小时的位置信息,手机需要这些信息来追踪卫星。信息到达手机后,GPS服务才能开始运作。运营商现在可以通过蜂窝或Wi-Fi网络来发送数据,这比卫星的线路要快很多。虽然还无法预测,但这个方法可能会使GPS的启动时间从45秒降为15秒左右,位置科技公司RX Networks的首席执行官Guylain Roy-MacHabee说道。  3、合成GPS(Synthetic GPS)  上面提到的辅助GPS仍然需要流畅的网络和时间来传输卫星的信息。合成GPS则通过计算预测卫星在未来几天或几周的位置。这种功能在数据中心运行,但不久也可以装载到手机上,而RX致力于研究此项技术,Roy-MacHabee说道。拥有了这种卫星数据,手机就可以在2秒钟内进行定位,他说道。  4、基站定位(Cell ID)  无论怎样,所有加速GPS的技术都需要手机找到3个卫星。运营商们已经知道了如何不通过GPS给手机定位,且它们在手机有这个功能前已经知道了。运营商通过一个叫做基站定位(Cell ID)的技术确定用户使用的基站和他们与周围基站的距离。由于知道了手机使用的基站的分区,再加以基站的编号和位置,运营商就可以将手机的位置和基站的位置联系起来。由于农村的基站相隔较远,与农村地区相比,这个系统在市区拥有更高的精确度。  5、Wi-Fi  Wi-Fi可以实现与基站定位同样的功能,但由于Wi-Fi的覆盖区域更小,所以它的精确度更高。实际上Wi-Fi有2中方法来实现定位。最常见的叫做RSSI(接收信号强度指示(received signal strength indication)),这种方法接收你手机的接入点的信号并在Wi-Fi网络的数据库中搜寻。而数据库中包含了那些接入点的位置。RSSI通过信号强度来判断手机与接入点的距离(几十米内)。另一种Wi-Fi定位方式叫做无线指纹识别(wireless fingerprinting),这种方法使用基于Wi-Fi信号格式的地点的资料。这种方法最适合手机用户经常出入的地方。指纹会在你第一次去那里时被记录,或者服务供应商会派人站在建筑特定的地点上来为每个用户记录指纹。这种技术定位的精确度可以达到几米之内,这也使芯片组可以使用许多的地位机制,Broadcom GPS部门的工程副主席Charlie Abraham说道,  6、惯性传感器(Inertial sensors)  如果你进入了没有无线系统的地方,惯性传感器可以通过其它输入来追踪你的位置。现在大多数智能手机都带有3个惯性传感器:一个用来确定方向的指南针(或磁力计)、一个检测你移动速度的加速计和一个感应旋转动作的陀螺仪。有了这三个工具,你的手机就可以在没有外部输入的情况下进行定位,但这只能持续一段时间。它们智能运作几分钟,来自Broadcom的Abraham说道。典型的使用案例是进入管道中:如果手机在你进入管道前知道你的位置,那么它就可以判断出你前进的速度和方向。更常见的是,这些工具与其他定位系统相结合,在信号弱的地方对其他定位系统进行弥补,Abraham说道。  7、气压计  在人行道或街上的室外导航通常都是在平面上的,向前或左转右转。但在室内,由于你居住楼层的不同,定位就不一样了。GPS可以在室内进行定位,但室内和郊区的GPS信号通常不好。而根据海拔越高空气越稀薄的原理,气压计就可以判断出你的海拔。一些智能手机已经有了可以检测到气压的芯片,但这个技术并不好用,RX的Roy-MacHabee说道。为了使用它,手机需要下载当地的天气数据来确定气压的基准线数值,还需要了解室内冷暖气气流等会影响传感器精确度的条件,他说道。气压计与那些已经在特定建筑校准过的移动设备相结合时效果最好,所以它适合在你的办公室而不是公共图书馆使用,Roy-MacHabee说道。气压计最好与其他工具相结合使用,比如GPS、Wi-Fi和检测你经过特定地点的小范围系统。  8、超声波  有时只是检测人们是否进入了特定的区域并讨论他们正在做的事。这可以通过小范围无线系统实现,比如带有标记的RFID(无线射频识别(radio-frequency identification))。NFC(近距离无线通讯技术(near-field communication))正逐渐加入到手机中,它可以用在检验点上,而制造商们主要还是希望使用NFC的支付功能。不管怎样,购物公司Shopkick已经使用了一个小范围系统来确认顾客是否进入商场。Shopkick并没有使用无线电设备,而是使用了在入口处发射超声波的设备。如果顾客带着装有Shopkick应用的手机穿过入口,那么手机的麦克风就会接收声波,而应用就会告诉Shopkick顾客已经进入商场。顾客通过这种方式可以获得积分,而这些积分可以兑换礼品卡和其他奖品。Shopkick开发了超声波系统的部分原因是由于这些声波不会穿越墙壁和窗户,人们只需走进商场就可以获得积分,首席技术官Aaron Emigh说道。这些声波可以在店内延伸大约150英尺(46米)。每一家店的声波都是不同的,由于频率太高,人们无法听到它,而狗却可以,好在实验结果显示它们不会受到影响,Emigh说道。  9、蓝牙指向标(Bluetooth beacons)  通过蓝牙指向标发送信号,就可以在特定的区域(比如在一家零售商店内)进行精确的定位。通过每几米就放置一个指向标,并令其与移动设备的最新标准蓝牙4.0连接,店主就可以使用类似与Wi-Fi指纹识别的技术接收信号,从而在店内进行定位,Broadcom的Abraham说道。正在进行室内蓝牙指向标实验的诺基亚表示,该系统的精确度可以达到10米以内。诺基亚表示,通过定位,商店可以在你离一个产品柜很近的时候给你提示并提供建议。  10、地面发射器(Terrestrial transmitters)  Australian startup Locata正在试图将GPS放置于地面来客服它的缺点。这家公司将把与GPS原理相同的位置发射器安装在楼房和基站上。因为这样静态的发射器可以提供比从卫星上发射的更强的信号,Locata的无线电广播设备可以迅速地确定用户的位置,精确度达到2英寸,Locata的首席执行官Nunzio Gambale说道。Locata的网络比GPS的要更可靠,他说道。据Gambale所说,这个接收器目前花费了2500美元并以从运输、国防和公共安全部门的用户中获利,而不久这项技术就可以廉价装载到手机中。之后,服务供应商就会是最大的客户,他说道。另一家在这领域的公司是NextNav,这家公司正在使用许可的频谱建设网络,并声称它可以覆盖美国93%的人口。NextNav的发射器将部署在城市的周围一圈,并利用其900MHz的频谱,战略和发展副主席Chris Gates说道。(编译/妍妍) 共 1 页
0相关资讯评论 17:32&p&
我就喜欢在公交车上玩游戏,老是因此坐过站。后来听说有个&公交闹铃&手机软件,它有一个到站提醒的功能,感觉很神奇,下了个试试,还真准,终于可以安心的玩游戏啦!哈哈~~~&span _fck_bookmark=&1& style=&display: none&&&&/span&&/p&关注排行技术资料京公网安备中国移动研究院版权所有无法找到该页
无法找到该页
您正在搜索的页面可能已经删除、更名或暂时不可用。
请尝试以下操作:
确保浏览器的地址栏中显示的网站地址的拼写和格式正确无误。
如果通过单击链接而到达了该网页,请与网站管理员联系,通知他们该链接的格式不正确。
单击按钮尝试另一个链接。
HTTP 错误 404 - 文件或目录未找到。Internet 信息服务 (IIS)
技术信息(为技术支持人员提供)
转到 并搜索包括&HTTP&和&404&的标题。
打开&IIS 帮助&(可在 IIS 管理器 (inetmgr) 中访问),然后搜索标题为&网站设置&、&常规管理任务&和&关于自定义错误消息&的主题。404 - 找不到文件或目录。
404 - 找不到文件或目录。
您要查找的资源可能已被删除,已更改名称或者暂时不可用。

我要回帖

更多关于 魅族手机导航不能定位 的文章

 

随机推荐