部分国行Android手机缺少谷歌GSM服务包导致HTML5 Geolocation无法定位的问题
2013-07-18 13:24
591 查看
最近项目上用到HTML5的geolocation用于定位,用Chrome
和手头的手机测试好好的功能,到终端用户那里反馈一些手机不能定位,最后确定出是部分三星、摩托的部分国行Android手机“阉割”了谷歌GSM服务包,导致HTML5的geolocation无法使用wifi和基站定位服务导致。
值得一提的是前期在stackoverflow和google groups里搜到对症描述的解决方案(貌似Android 2.*或者三星自身的问题)全部失效,因为介是个“中国特色”的问题-_lll
首先介绍下HTML5的Geolocation功能。通常情况下,我们是先判断浏览器是否支持geolocation, 如果不支持,可以提示错误,或者进入其他逻辑处理流程,现在移动端的智能手机浏览器绝大部分都是支持的。
?
?
写到这里,只是说明了原因,那有没有什么解决方案呢。搜索了下,原来提供地图和定位相关服务的不止是google一家,还有百度、高德、搜狗,下面介绍下百度的api
(1)百度地图javascript API geolocation
http://developer.baidu.com/map/jshome.htm
咋一看,百度js api也有自己的geolocation(http://developer.baidu.com/map/reference/index.php?title=Class:%E6%9C%8D%E5%8A%A1%E7%B1%BB/Geolocation) 这个取代html5自带的不就可以了么,经过实验,真是图样图森破了,原来所有的javascript API都还是调用的浏览器自身的geolocation进行封装实现的,也就是说如果原本不能wifi+基站定位,用百度、高德的javascript api的效果是一样的。
这里要说明的是,如果是开发Android原生软件的话,可以在APP里封装百度地图定位的SDK,这个是可以解决没有谷歌GSM服务包无法定位的问题的,因为百度地图定位SDK实际上是起到和谷歌服务包里面的定位模块一样的作用,由这里也可以看到HTML5 Webapp和原生APP的一个差别,不是一个层面的解决方案。
(2)使用百度的LocalCity() 根据IP定位到城市
既然上面说的HTML5自带的geolocation和百度Javascript API的geolocation都不能用了,那么就完全不能定位了么,我们这里暂时采用了一个方案,就是使用百度的LocalCity接口,进行IP定位,可惜这个只能返回城市和市中心的坐标,对于需要精确定位的LBS产品基本没有意义(根源上IPv4时代通过IP定位的想法本来就不是很靠谱吧),但是对我们的产品不失为一种可以接收的降级方案,当然用户体验上需要通过文字说明或者弹窗的形式告知用户一。
?
http://developer.baidu.com/map/ip-location-api.htm
?
这个api有几个值得注意的地方
(1)由于安全起见,所以Javascript是不支持直接获取IP地址的,所以需要服务器端,此外,如果手机程序是webapp或者和服务器不在一个域的话,还需要跨域支持,我们这里使用的是CROS跨域,get_ip.php如下(包括获取IP地址,和根据IP请求百度IP定位API获得城市信息)
?
参见上面js里的
?
转载地址:http://awebird.com/blog/art/24
相关文章推荐
- 部分国行Android手机缺少谷歌GMS服务包导致HTML5 Geolocation无法定位的问题
- Android手机缺少谷歌服务框架问题
- Mac OS X 下部分Android手机无法连接adb问题之解决方案
- android6.0系统缺少com.android.internal.policy.PolicyManager导致无法获取LayoutInflater实例问题
- Mac OS X下Android系统M2、华为部分手机无法连接问题之解决方案
- 谷歌Pixel手机近期一直bug不断,除了Android Auto服务以及谷歌闹钟Bug外,据外媒Androidpolice报道称,最近部分Pixel手机被曝光无法接收文字短信,谷歌已经确认该bug的
- Mac OS X 下部分Android手机无法连接adb问题之解决方案
- iphone手机微信端html5 Geolocation定位失效的问题
- Mac OS X 下部分Android手机无法连接adb问题之解决方案
- Android手机ROOT之后更改字体文件导致无法启动的问题
- 【转】Mac OS X下Android系统M2、华为部分手机无法连接问题之解决方案
- Mac OS X 下部分Android手机无法连接adb问题之解决方案
- Mac OS X 下部分Android手机无法连接adb问题之解决方案
- Mac OS X下Android系统M2、华为部分手机无法连接问题之解决方案
- 部分android手机WebView无法成功同步Cookie问题的解决方案(5.0系统以上)
- Android开发——相册拍照_03.解决相机拍照之后部分手机无法将图片保存到路径或部分手机点击相机确定无法返回问题
- Android引用百度定位API第三方组件后导致其它.so文件无法正常加载的问题
- Mac OS X 下部分Android手机无法连接adb问题之解决方案
- [转]Mac OS X 下部分Android手机无法连接adb问题之解决方案
- iphone手机微信端html5 Geolocation定位失效的问题