您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码:  验证码,看不清楚?请点击刷新验证码 必填



  求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Modeler   Code  
会员   
 
   
 
 
     
   
 订阅
  捐助
cordova开发中,android端利用百度sdk定位
 
作者:albert528108 来自于:CSDN 发布于 2015-10-29
  4696  次浏览      16
 

近期的一个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成功快速获取到经纬度信息,再也不用重启机子了:

   
4696 次浏览       16
 
相关文章

手机软件测试用例设计实践
手机客户端UI测试分析
iPhone消息推送机制实现与探讨
Android手机开发(一)
 
相关文档

Android_UI官方设计教程
手机开发平台介绍
android拍照及上传功能
Android讲义智能手机开发
相关课程

Android高级移动应用程序
Android系统开发
Android应用开发
手机软件测试
最新课程计划
信息架构建模(基于UML+EA)3-21[北京]
软件架构设计师 3-21[北京]
图数据库与知识图谱 3-25[北京]
业务架构设计 4-11[北京]
SysML和EA系统设计与建模 4-22[北京]
DoDAF规范、模型与实例 5-23[北京]

android人机界面指南
Android手机开发(一)
Android手机开发(二)
Android手机开发(三)
Android手机开发(四)
iPhone消息推送机制实现探讨
手机软件测试用例设计实践
手机客户端UI测试分析
手机软件自动化测试研究报告
更多...   

Android高级移动应用程序
Android应用开发
Android系统开发
手机软件测试
嵌入式软件测试
Android软、硬、云整合

领先IT公司 android开发平台最佳实践
北京 Android开发技术进阶
某新能源领域企业 Android开发技术
某航天公司 Android、IOS应用软件开发
阿尔卡特 Linux内核驱动
艾默生 嵌入式软件架构设计
西门子 嵌入式架构设计
更多...