Pages

Thursday, 22 August 2013

为什么很多Android手机的谷歌地图无法定位

 这是一个比较复杂的问题。我经过这一段时间的分析和摸索,认为主要原因是以下几个因素:
1、刷机。很多Android用户都迷上了刷机,喜欢尝试一些第三方ROM。殊不知第三方ROM仅仅是爱好者开发,虽然有一些特色功能可以吸引你,但是BUG相比官方ROM来说必定至多不少。例如大名鼎鼎的Cyanogen Mod团队的CM系统,很多build存在不支持FM收音机、相机程序存在BUG、无法录音、无法GPS等问题。因此建议大家使用官方的ROM,这里所说的官方可不是国行哦,国行会阉割功能这个是众所周知的。这里所说的官方ROM是指的全球(GLOBAL)版或者港行(Hong Kong)版的ROM,并且没有经过第三方的精简和阉割。
2、GPS开关。有些人不能定位仅仅是因为在手机设置里没有允许GPS定位,请在『设置』『位置与安全』中勾选『使用无线网络』和『使用GPS卫星』,手机会提示你『信息会上传至Google服务器进行精准位置计算』和『定位需要进行数据传送,可能会产生流量费用』,同意即可。文末我将解释为什么GPS定位也需要数据交换。
3、网络连通性。在第二点中提到了,使用Android自带的定位功能,可能需要连接Google服务器进行位置分析,这带来了一个问题,那就是『中国特色』了。由于一些众所周知的原因,部分Google服务器在中国大陆因为『DNS污染』的缘故时常处于无法连接的状态,导致很多Google服务在中国大陆的某些地域某些时段无法正常使用,包括定位。
第2点和第3点往往是主要原因。
以下是可选的解决办法:
1、最简单的办法,也是绝大多数人会选择的办法——
改用本土服务,例如百度手机地图。百度手机地图很多地方都在学习Google地图,不过在本土化方便自然要比面向全球的Google地图要好。针对中国大陆手机上网慢、费用高的特点,百度地图可以下载离线地图包,定位也可以完全离线。百度地图定位方式多样,有GPS、手机流量网络、甚至仅仅依赖蜂窝电话网,其定位精度依次为5~25m, 25~200m, 200m~2200m。即使手机的GPS不能用甚至没有,甚至连流量都没有开,百度手机地图依然可以依赖蜂窝网络进行定位,定位精度通常为700m左右。这一点非常类似塞班平台的谷歌地图,因为塞班上的谷歌地图具有其所有的定位方式。不过到了Android这样的『互联网手机』时代,Google认为手机上网已经很廉价因此无需斤斤计较节约流量,与中国大陆手机上网慢、费用高的现状有所脱节。
2、坚持使用定位更加准确的谷歌地图,你需要——
第一步,确认你的手机可以使用百度地图或者GPS Test等GPS定位工具进行GPS定位,这表明你的手机目前使用的系统可以正确调用GPS模块。如果不能,请刷机为全球版或者港行版ROM。
第二步,确认你的手机在『设置』『账户与同步』中可以添加Google账户,这表明你的手机上集成有Google Apps。如果没有,请刷机为全球版或者港行版ROM,或者在ROOT之后在Recovery模式下安装Google Apps加强包。完成第二步之后,请登录Google账户,您的手机随后会在Google服务器上注册,并可以使用Android官方市场。
第三步,确认你的手机在『设置』『位置与安全』中勾选了『使用无线网络』『使用GPS卫星』,手机会提示你『信息会上传至Google服务器进行精准位置计算』和『定位需要进行数据传送,可能会产生流量费用』,同意即可。确认你的手机在『设置』『应用程序』中勾选了『未知来源』,这样你可以安装Android官方市场之外的程序。
第四步,ROOT你的手机(如果你还没有进行ROOT)。
第五步,前往此处下载并安装HTCHost软件-http://www.coolapk.com/apk-3947-com.snda.hosts/。这个软件可以将Google服务器的域名和IP地址的对应关系进行绑定,从而规避中国大陆独有的DNS污染,有效解决Google服务器无法连接的问题。这一步进行之后,你会发现之前可能出现问题的Gmail、Google Maps、Google搜索、Google同步均可顺利使用。
第六步(可选),前往此处-http://blog.hetaoos.com/archives/66下载并安装运营商伪装软件。这个软件可以让你的手机在Google看来是美国的手机,很多程序,例如Google Maps, Gmail是限制中国大陆用户在官方市场下载的(不然很多小白下载了因为Google服务器无法连通的问题都去骂Google了)。这一步是可选的,因为这些程序你可以在互联网上的很多安卓市场找到。进行这一步的好处是你可以保证你下载的程序是官方的,通过Google认证的,而不是修改版的(互联网上存在一些Google地图的修改版)。
第七步(可选),开启Google同步服务,你的联系人数据从此不会丢失。
文末,将对Google地图定位为什么需要提交Google服务器进行解释:上文已经提到,Google认为现在已经步入了互联网时代,包括手机,因此在设计时没有考虑到数据流量费用的问题,这也是因此谷歌地图默认没有离线功能的原因。至于GPS定位时需要将数据上传至Google服务器,是出于以下目的:1、服务器可以利用数据进行比你的手机更为精确的位置计算2、可以籍此收集和统计用户的位置信息,主要是用于Adsense 和 Latitude(如果你加入此计划) 事实上很多具有定位功能的应用都会将你的位置数据提交服务器,区别在于Google在开启定位功能的时候会明确告知 『信息会上传至Google服务器进行精准位置计算』和『定位需要进行数据传送,可能会产生流量费用』,而很多程序对此不会进行提示。有关Google最新的Google全线产品统一的隐私权政策,请参见这里-http://www.google.com.hk/intl/zh-CN/policies/privacy/