转自:http://my.oschina.net/liangzhenghui/blog/339965
近期的一个phonegap项目把我做的焦头烂额,最让人蛋疼的就是安卓4.1.x对html5的定位获取经纬度有个无比巨大的坑,一般我们利用如下代码进行html5的定位
navigator.geolocation.getCurrentPosition(function(pos){ alert(JSON.stringify(pos)) },function(err){ alert(JSON.stringify(err)) }, { enableHighAccuracy: false, timeout: 60*1000, maximumAge: 1000*60*10});
上述代码在ios上一切正常,在安卓4.3及以后的机器也可以正常访问,但是在安卓4.1上就会出现timeout,如果我们把 enableHighAccuracy 设置为 true,那么在室外,空气良好的地方,安卓4.1将能够通过卫星进行定位,但是速度巨慢,其实我们很多时候并不是想要非常精准的定位信息,完全可以通过基站或者wifi来定位,虽然html5提供给了我们这样的接口,但是安卓4.1上支持的不是很好。
另外一个巨坑也直接影响了我对这个问题的判断,如果我重启了安卓4.1的机器,那么上述代码将能够正常跑大约几小时,甚至半天,可是到了第二天又会出现同样的问题,无尽的timeout。总不能让客户每次使用定位功能都重启一次机器吧,涉及这个问题的机器有包括我的华为,三星note2,oppo等目前主流的安卓4.1系统的机子,在另外几台例如glasky3、红米等安卓4.3的机器上没有出现。
然后我直接将上述代码在浏览器中运行,发现安卓4.1也是无法跑起来,天真的我以为是安卓4.1对html5的接口支持问题,于是利用cordova加载geolocation插件,想利用cordova的native方法解决这个问题,但是问题依旧,其中意外的发现我的华为和note2能够跑起来了,其实只不过碰巧刚重启过而已。
这个是我在stackoverflow上发的问题,碰到这类问题的中外友人巨多。
http://stackoverflow.com/questions/23383750/phonegap-geolocation-sometimes-not-working-on-android
如何填补这个坑呢?我搜遍了整个网络,发现国外可以使用google地图来解决,而国内只有使用百度的定位SDK来解决了,不过最新的安卓百度定位SDK4.1同样巨坑无比,直接下载官方的demo跑在真机上各种无法定位,一直报errorcode 602,于是逛了下百度SDK的论坛,发现很多人说4.1版本的SDK问题很多,不如用回4.0版本,于是我报着试试看的心情用回了SDK4.0版本,最终在安卓4.1的机器上定位成功,不存在需要重启的情况,然后我根据 andybuit 作者的代码,小幅改动,封装成支持新版 cordova 3.4.1 的插件放在github上,供碰到同样问题的朋友使用,希望能够帮助到他们。再次感谢 andybuit 提供的百度定位代码,谢谢!
新版本插件地址:
https://github.com/DoubleSpout/phonegap_baidu_sdk_location
下面步入正题,通过一个简单的安卓 hello world 程序来运用百度定位插件
1、建立 hello world 项目:
cordova create hello com.example.hello HelloWorld
2、建立安卓支持,目前本插件只支持安卓,似乎也只要支持安卓,ios对html5的定位支持的非常好,无须百度定位SDK
cordova platform add android
3、安装 baidu 定位的插件:
可以通过git来下载远程的,需要安装git命令
cordova plugin add https://github.com/DoubleSpout/phonegap_baidu_sdk_location.git
也可以将插件下载到 hello\plugins 目录下,文件夹重命名为 com.spout.phonegap.plugins.baidulocation,然后执行命令:
cordova plugin install com.spout.phonegap.plugins.baidulocation
4、插件安装完成之后,执行一次 build 命令,将插件的配置文件写入安卓平台目录:
cordova build android
5、打开eclipse,对hello项目进行配置:
5.1、新建工程
5.2、从已有代码库添加
5.3、找到安卓的项目路径
5.4、编辑项目属性
5.5、添加百度sdk的jar文件
5.6、选择locSDK
5.7、编辑source 附件
5.8、同样选择百度sdk的jar
5.9、保存路径
5.10、选择order and export 将前面全部打勾
5.11、将文本编辑编码改为utf-8
5.12、打开 hello\platforms\android\src\com\spout\phonegap\plugins\baidulocation\BaiduLocation.java 文件,修改自己的apkkey(其实不修改也能使用),大约在64行:
key的生成和获取详见百度sdk的key获取页面,地址:
http://developer.baidu.com/map/geosdk.htm
6、找到 hello\www\js\index.js 文件,修改并增加如下几行,通过百度SDK获取经纬度:
onDeviceReady:function(){
app.receivedEvent('deviceready');
//通过百度sdk来获取经纬度,并且alert出经纬度信息
var noop =function(){}
window.locationService.getCurrentPosition(function(pos){
alert(JSON.stringify(pos))
window.locationService.stop(noop,noop)
},function(e){
alert(JSON.stringify(e))
window.locationService.stop(noop,noop)
});
},
7、完成上述工作后,执行命令打包生产APK,注意百度定位的SDK在模拟器上是无法运行的,会曝出167错误码
cordova build android
8、将 hello\platforms\android\ant-build\HelloWorld-debug-unaligned.apk 文件拷贝到之前有问题的安卓4.1的机器上,显示如下图,通过wifi成功快速获取到经纬度信息,再也不用重启机子了:
至此百度SDK说明完毕,希望能够帮助到利用phonegap开发安卓应用,又碰到我这样问题的朋友~
相关推荐
本插件是cordova-qdc-baidu-location的升级版,利用百度定位SDK为Web app解决大陆Android定位不准的问题。 相比原插件,更新百度地图Android版定位SDK(v6.2.3)并提供watchPosition和clearWatch方法。
基于百度地图Android版定位SDK(v7.1)以及百度地图IOS SDK (v3.2.1)
百度地图定位Cordova插件,支持Android,IOS 可以在此地址查看example 基于百度地图Android版定位SDK(v7.1)以及百度地图IOS SDK (v3.2.1) 一,申请Android及IOS版密钥 申请密钥Android定位SDK 每一个...
使用Cordova开发android项目简单实例,实现获取手机信息
项目中包含很多案例如:使用cordova 使用sqlite存储、cordova使用camera、cordova使用百度地图定位、cordova使用file、cordova使用dialog、cordova使用androidToast等等。另外里面有一个使用的简单说明。
cordova-plugins-activity cordova调用安卓原生activity插件 使用简介 JS端使用方式 //sendData表示要从js端发送到原生activity的数据,需用json对象传输 var sendData = { id:10001, name:"Simon", age:28 }; ...
> 此实例代码为 Android Studio 原生项目集成 Cordova 插件演示,而非通过 Cordova 直接编译,方便您在现有 Android Studio 项目中集成 Cordova 进行 H5 混合开发。 为了结构清晰及易维护性,项目分三个 Module ,...
Vue.js+Cordova开发H5混合应用(以Android为例,附说明文档和工程)
Cordova / PhoneGap 开发 1. 基于HTML,CSS和JavaScript的移动开发框架 2. 跨平台快速开发:能够支持iPhone,Android,Palm,Symbian, WP7, WP8, Bada和Blackberry 3. 核心功能:包括地理定位,加速器,联系人,声音...
cordova-plugin-baidumaplocation插件开发百度地图定位功能与地图的显示、图片懒加载,demo
PhoneGap/Cordova的支付宝Android插件
cordova phoneGap android
cordova打包项目android生成apk签名.txt
Android Cordova 插件开发之编写自定义插件源码
phonegap cordova 最简单的android应用例子,直接执行cordova run android 进行编译后可以在手机上浏览效果
本文档值介绍Android 打包,但Ios打包几乎一样...
工程中已经集成了MTJ的SDK,以及百度移动统计Cordova插件,可以直接运行调试 JS Api调用示例,请查看$(home)/www/js/index.js 文件。 Android clone此代码库,并运行 cordova platform add android cordova prepare ...
高版本的cordova不再提供jar包,手动编译亲测可用,win10系统,Eclipse-23.0.2,android-22。详细请见 《基于win10的Android + Eclipse-8.0.2 + PhoneGap-8.0.0 环境配置》
cordova开发 1.登录http://cordova.apache.org 官网,下载node.js我下载的是右侧的。 2.下载好了,点击install都是next傻瓜安装。 3.安装好之后,点击运行CMD。输入”npm”指令有反应为安装成功 4.接着,大陆客户...