phonegap利用百度地图sdk定位

标签: phonegap 利用 百度地图 | 发表时间:2014-05-20 21:07 | 作者:snoopyxdy
出处:http://snoopyxdy.blog.163.com
近期的一个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上发的问题,碰到这类问题的中外友人巨多。

如何填补这个坑呢?我搜遍了整个网络,发现国外可以使用google地图来解决,而国内只有使用百度的定位SDK来解决了,不过最新的安卓百度定位SDK4.1同样巨坑无比,直接下载官方的demo跑在真机上各种无法定位,一直报errorcode 602,于是逛了下百度SDK的论坛,发现很多人说4.1版本的SDK问题很多,不如用回4.0版本,于是我报着试试看的心情用回了SDK4.0版本,最终在安卓4.1的机器上定位成功,不存在需要重启的情况,然后我根据 andybuit 作者的代码,小幅改动,封装成支持新版 cordova 3.4.1 的插件放在github上,供碰到同样问题的朋友使用,希望能够帮助到他们。再次感谢 andybuit 提供的百度定位代码,谢谢!

新版本插件地址:

下面步入正题,通过一个简单的安卓 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、新建工程
phonegap利用百度地图sdk定位 - snoopyxdy - snoopyxdy的博客
 
5.2、从已有代码库添加
phonegap利用百度地图sdk定位 - snoopyxdy - snoopyxdy的博客
 
5.3、找到安卓的项目路径
phonegap利用百度地图sdk定位 - snoopyxdy - snoopyxdy的博客
 
5.4、编辑项目属性
phonegap利用百度地图sdk定位 - snoopyxdy - snoopyxdy的博客
 
5.5、添加百度sdk的jar文件
phonegap利用百度地图sdk定位 - snoopyxdy - snoopyxdy的博客
 
5.6、选择locSDK
phonegap利用百度地图sdk定位 - snoopyxdy - snoopyxdy的博客
 
5.7、编辑source 附件
phonegap利用百度地图sdk定位 - snoopyxdy - snoopyxdy的博客
 
5.8、同样选择百度sdk的jar
phonegap利用百度地图sdk定位 - snoopyxdy - snoopyxdy的博客
 
5.9、保存路径
phonegap利用百度地图sdk定位 - snoopyxdy - snoopyxdy的博客
 
5.10、选择order and export 将前面全部打勾
phonegap利用百度地图sdk定位 - snoopyxdy - snoopyxdy的博客
 
5.11、将文本编辑编码改为utf-8
phonegap利用百度地图sdk定位 - snoopyxdy - snoopyxdy的博客
 
5.12、打开 hello\platforms\android\src\com\spout\phonegap\plugins\baidulocation\BaiduLocation.java 文件,修改自己的apkkey(其实不修改也能使用),大约在64行:
phonegap利用百度地图sdk定位 - snoopyxdy - snoopyxdy的博客

key的生成和获取详见百度sdk的key获取页面,地址:

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成功快速获取到经纬度信息,再也不用重启机子了:
phonegap利用百度地图sdk定位 - snoopyxdy - snoopyxdy的博客
 
至此百度SDK说明完毕,希望能够帮助到利用phonegap开发安卓应用,又碰到我这样问题的朋友~

相关 [phonegap 利用 百度地图] 推荐:

phonegap利用百度地图sdk定位

- - snoopyxdy的博客
近期的一个phonegap项目把我做的焦头烂额,最让人蛋疼的就是安卓4.1.x对html5的定位获取经纬度有个无比巨大的坑,一般我们利用如下代码进行html5的定位. 另外一个巨坑也直接影响了我对这个问题的判断,如果我重启了安卓4.1的机器,那么上述代码将能够正常跑大约几小时,甚至半天,可是到了第二天又会出现同样的问题,无尽的timeout.

初识PhoneGap

- - IT技术博客大学习
标签:   PhoneGap.      一、PhoneGap是什么.     PhoneGap是一个标准的开源框架,用PhoneGap开发移动应用是免费的,无论是商业或是开源;一个用基于HTML,CSS和JavaScript的,创建跨平台移动应用的 快速开发平台. 它使开发者能够利用iPhone、Android、Palm、Symbian、WP7、Bada和Blackberry智能手机的核心功能——包括地理定位,加速器,联系人,声音和振动等,此外PhoneGap拥有丰富的插件,可以以此扩展无限的功能.

Phonegap踩过的坑

- - snoopyxdy的博客
最近2个月一直在做一个Phonegap(现改名为cordova,其实我用的cordova来做的,但是叫惯了phonegap)的手机app项目,目前已经debug完毕,准备发布上线了,发现真印证了网上流传的一句话:. 如果你恨一个人,让他去开发PhoneGap应用;如果你爱一个人,让他去开发PhoneGap应用.

Android + Eclipse + PhoneGap 环境配置

- - CSDN博客推荐文章
用了3天的时间,终于把环境搭建完毕,郁闷了N天,终于完成了. 这里我只是讲述我安装的过程,仅供大家参考. 环境搭建首先要去下载一些安装包:. (下载前注意一下,电脑是32位还是64位的请注意选择安装包). java环境的JDK:http://www.oracle.com/technetwork/java/javase/downloads/index.html.

phonegap 框架详解 - Blue Sky ......

- - 博客园_首页
首先, 来看一下phonegap 初始化流程以及Native 与 JS 交互流程图. 说明:socket server模式下, phonegap.js 源码实现的采用1 毫秒执行一次XHR请求,  当Native  JS 队列里面有JS语句数据时,才是真正的1毫秒调用一下;  当没有数据, scoket server 会阻塞10毫秒, 也就是XHR 要等10秒钟才能收到结果,并进行下一次的轮询.

百度地图API--HelloWorld

- - CSDN博客推荐文章
百度地图API--Hello World.           这里引用一个经典的单词"Hello World",这个词是程序界所有人都很熟悉的,我在开始学习Java的时候就是从这开始的,什么编写一个Hello World程序,甚至有的面试题中有“写一个输出Hello World的程序”来测试面试者的面向对象的思维.

PhoneGap现已完全支持WP7

- - HTML5研究小组
PhoneGap现已完全支持Windows Phone 7所有的原生功能,其支持力度达到了iOS与Android的水平. 微软在去年7月帮助Nitobi将PhoneGap移植到了Windows Phone Mango上,并在9月 发布了 该框架的一个可用版本. 很多原生特性都得到了支持,包括Accelerometer、Camera、Contacts、Geolocation、 Notification与MediaCapture,但团队希望能找到一些Bug.

关于Phonegap的一些看法

- - SweetRiver
呃, phonegap今年发展不错啊,至少“跨平台”一个词就是多少人无法拒绝的一个诱惑,而且使用HTML+CSS+JS开发,可灰常有吸引力. 网易轻博LOFTER的移动客户端就是用phonegap开发的,但是目前只有iOS版本,Android版本似乎还在开发中. 试用了下iOS下phonegap做出来的LOFER,应该说UI效果非常接近原生APP,但不如原生APP流畅,可以感觉到网易LOFTER团队付出了很多的努力.

Phonegap + HTML5 开发经验小结

- - Miller
        去年曾对 Phonegap做过一次调研,当时还是1.1版本,印象也一般. 对他的性能以及真实的跨平台能力都不太确定. 今年过完春节至今正好有机会参与了一个纯Phonegap + HTML5开发的项目,项目至今已经完成了一期的App Store提交,所以也正好能抽时间来小结一下. 一个月左右的开发过程让我对这种开发模式有了更深的认识,这对于前端开发人员而言绝对是一个大的机会.

HTML5漫谈(4)–HTML5应用平台:PhoneGAP

- - HTML5研究小组
(  程宝平 chengbp @gmail.com). http://phonegap.com)按官方说法,是HTML5移动应用平台,它包括两部分:. 1)       应用开发框架:采用Web/HTML5技术编写应用,支持设备能力(如GPS、重力感应等)调用;支持能力插件灵活扩展. 图1 PhoneGAP支持设备能力API列表.