在我的华为U8800 Android手机上,定位功能有两种:一种是使用GPS定位,需要在户外能够搜到GPS卫星的地方使用,这款手机的搜星能力貌似很弱,不太好用,这个就不用说了,不是本文的讨论范围。
另一种定位方式是类似于我的iPod Touch上的“使用无线网络定位”,也就是“系统设置 -> 位置与安全 -> 使用无线网络(通过WLAN和/或移动网络确定的位置)”这个选项。该定位方式大概的原理是:通过当前WIFI基站或移动运营商基站的IP地址,在Google Maps的数据库里面进行查找(我非常怀疑Google Maps提供相关的web service专门做这件事),如果该IP地址在Google Maps数据库里面已经有相应的位置信息,则用该位置坐标作为当前client端(在这里是手机)的位置。
可是这个在我的iPod Touch上一直好用的功能到了我的手机上,从来就没有好使过:比如在新浪微博的客户端上,如果插入位置信息,则风火轮转了二十几秒后告诉我“无法获得位置信息”。今天我下定决心花些时间搞定这个问题。
首先从google得到这篇文章。其实该文章内容并不是解决定位问题,而是解决删除DocumentsToGo这个U8800自带系统软件的问题,但是其中提到“安装SystemAppRemover可以enable无线网络定位等功能”,解决方法从此豁然开朗。
首先,在机锋市场搜索“System App Remover”并安装,运行后发现必须首先让其获得root权限,否则不能工作。从机锋市场搜索root工具,得到”GingerBreak”这个一键root工具,安装并运行,系统会安装一些脚本并重启。重启会有些慢,大概会花一到二分钟。重启完成后,再进入“System App Remover”,则其可以正常运行。
在“System App Remover”(中文名称为“系统程序卸载器”)中,进入“系统程序”,可以看到有很多以”Google”开头的apk程序是被禁用的,我现在终于明白了为什么在我的手机上,很多Android自带的服务,比如“google celandar同步”,“gtalk”,“gmail”等等,一直是不能用的。在SystemAppRemover里面可以将他们重新启用。至于定位服务,我逐一查看了所有被禁用的程序,其中有一项是”NetworkLocation.apk”,从名称上来看,这就是我之前提到的定位服务,将其启用。
这次我再进入新浪微博使用定位服务,却发现定位服务依然不可用,心里顿时凉了半截。难道我搜索的方向有问题?再次google,发现了这篇文章,于是柳暗花明。从该文来看,我的猜测是正确的:“NetworkLocation.apk”就是“谷歌网络定位服务”对应的apk程序。而且该文章还列出了Android手机上google内置服务程序的列表,很有参考价值,我列在了本文的后面。
那么,为什么新浪微博的定位服务仍不可用呢?我想到了定位问题的办法:首先进入我手机里安装的“Google Earch”,尝试定位,成功!再进入系统自带的”地图”(实际就是Google Maps),定位也可以成功。也就是说只有新浪微博定位不成功。新浪微博和google earth, Google Maps唯一的区别是:新浪微博在手机一启动后我就打开了,而后面两个是我在启用“NetworkLocation.apk”之后打开的,那问题的原因很可能是:新浪微博应用启动后,每次退出并没有真正结束应用,而还是在后台运行,而且它是在启动初始化的时候去初始化NetworkLocation功能,所以在其启动后再启用NetworkLocation功能是无法生效的。
想到这里,直接重启手机,再进入新浪微博,尝试定位功能,终于,一切正常了。
到这里,问题已经解决。不过我还有几句感慨:不知道华为这样的国内手机厂商,是处于什么目的把自己生产的android手机中内置的google服务都禁用掉。从消费者的角度来说,如果你是在android标准版的基础上二次开发,那么你应该是在功能上做加法,也就是增加更多的符合国内使用习惯的功能;而不是做减法:把本来很好的功能用自己写的不那么好用的程序去代替,甚至把默认好用的定位服务直接禁用,这无论如何是说不过去的。这从另一个方面再次印证了国内厂商重硬件不重软件的传统。我希望在Ali云手机和小米手机上不要出现类似的问题(我还没有用过,所以没有发言权)。
希望Android平台的手机厂商能够明白:Andoird的精髓是开放:这一点是你们的核心竞争力,是iPhone永远不可能超越的,失去了这一点,你们不可能和iPhone竞争。所以正确的做法应该是:做好你的专有功能,同时,把选择的权利留给用户。
1 | 1、GenieWidget.apk 天气与新闻 |