PhoneGap插件开发---基于百度LBS的导航插件(三)
来源:互联网 发布:360全景拍摄软件 编辑:程序博客网 时间:2024/06/04 20:04
一、概述
前两篇讲述了PhoneGap开发环境的搭建和百度LBS服务密钥的申请及配置,这一篇将详细讲解如何开发PhoneGap导航插件。
二、主要内容
PhoneGap插件开发大致有四个步骤:
1、注册插件( 其中注册插件并不是必须的,这种做法请参考后面参考链接的第2个链接的做法。这里就不再讲解)
2、编写js接口
3、配置config.xml文件
4、编写java实现
接下来就对每一个步骤进行详细的说明:
1、在assets目录下的cordova-plugins.js文件中配置插件,要配置两个地方,一个是module.exports= [{}];另一个是module.exports.metadata = { }
如下所示:
cordova.define('cordova/plugin_list', function(require, exports, module) {module.exports = [ //Author: Gameloft9 //Time: 2015.8.25 //Description: // file:接口所在js文件. // id:插件Id. //merges: 在 javascript中调用该插件的名称 { "file": "plugins/intent.js", "id": "org.apache.cordova.intent", "merges": [ "navigator.intent" ] }, { "file": "plugins/HUBUNavigationPlugin/navigate.js", //导航插件js文件 "id": "cn.edu.hubu.navigation", //插件id "merges": [ "navigator.HUBUNavigate" //调用名称 ] }, { "file": "plugins/cordova-plugin-whitelist/whitelist.js", "id": "cordova-plugin-whitelist.whitelist", "runs": true }];module.exports.metadata = //还要添加元数据,设置插件版本号// TOP OF METADATA{ "org.apache.cordova.intent" :"0.0.1", "cn.edu.hubu.navigation" :"0.0.1", //导航插件版本 0.0.1,这个是自己取的。 "cordova-plugin-whitelist": "1.0.0"}// BOTTOM OF METADATA});
2、在assets-->www->plugins目录下编写javascript接口
在plugins目录下新建导航插件目录HUBUNavigationPlugin,并新建导航的js文件navigate.js,如下图所示:
navigate.js的内容如下:
/*第一行中"cn.edu.hubu.navigation"为在cordova_plugins.js中定义的插件id*/cordova.define("cn.edu.hubu.navigation", function(require, exports, module) { var exec = require('cordova/exec');module.exports = { /** * exec方法一共5个参数: 第一个 :成功回调 第二个 :失败回调 第三个 :将要调用的对象名(在config.xml中配置,对应于feature的name属性,value就是本地实现的java类) 第四个 :调用的方法名(java类中通过action识别方法名) 第五个 :传递的参数(json格式) */ //startNavigating : 插件的导航方法,方法名自己取。 //longtOrig,latOrig,longtDes,latDes:分别表示起点和终点的经纬度。 //通过调用cordova.exec()方法链接本地的java实现。 startNavigating: function(longtOrig,latOrig,longtDes,latDes) { cordova.exec( function(winParam){ //成功后的回调,这里仅仅弹出了返回参数。 alert(winParam); }, function(err) { //失败后的回调,可以弹出失败原因。 alert('fail'+err); }, "HUBUNavigation", "intent", [longtOrig,latOrig,longtDes,latDes]); },};});3、在res-->xml目录下配置config.xml文件。
在config.xml文件中配置实现该接口的对象名及本地java类,如下所示:
<feature name="HUBUNavigation"> <param name="android-package" value="plugins.navigate" /> </feature>
其中name="HUBUNavigation"对应于navigate.js中exec方法的第三个参数。value="plugins.navigate"对应于本地实现该接口的java类。
4、在src目录下编写实现该接口的java文件
在src目录下创建plugins目录,并创建navigate.java文件,如下图所示:
navigate.java代码如下:
package plugins;import java.net.URISyntaxException;import org.apache.cordova.CallbackContext;import org.apache.cordova.CordovaPlugin;import org.json.JSONArray;import org.json.JSONException;import android.content.Intent;/** * js调用的方法在该类中实现 。该类必须继承CordovaPlugin * CordovaPlugin里面有实现cordovaActivity的方法,提供startActivityForResult(); * * @author Gameloft9 * */public class navigate extends CordovaPlugin { //构造函数public navigate() {} //回调上下文,用于向js回传数据CallbackContext callbackContext;/** * 对js接口的实现,通过重写execute方法实现,该方法有多重重载形式。 * */@Overridepublic boolean execute(String action, JSONArray args,CallbackContext callbackContext) throws JSONException {this.callbackContext = callbackContext; //根据action判断js调用的是哪个方法,这里的"intent"对应于js文件中exec方法中的第4个参数if (action.equals("intent")) {// 获取参数String longtOrig = args.getString(0);String latOrig = args.getString(1);String longtDes = args.getString(2);String latDes = args.getString(3);//生成路径String[] route = {longtOrig,latOrig,longtDes,latDes};this.callBDNavigation(route);//调用百度地图客户端导航return true;}return false;}/** * 调用百度地图客户端进行导航 * @param route 导航起点终点 * */private void callBDNavigation(String[] route) {routeplanToNavi(route);}@Overridepublic void onActivityResult(int requestCode, int resultCode, Intent intent) {super.onActivityResult(requestCode, resultCode, intent);//传递返回值 给js方法callbackContext.success("调用NavigateActivity成功!");}/** * 移动APP调起Android百度地图 * @param route 路径包括起点终点(使用的GPS坐标(WGS84)) * */private void routeplanToNavi(String[] route) { Intent intent;try {//通过uri服务调启百度地图客户端,同时将路径参数传递过去 //调用参数可以参考百度LBS官网,地址如下:http://developer.baidu.com/map/index.php?title=uri/api/androidintent = Intent.getIntent("intent://map/direction?origin=latlng:"+route[1]+","+route[0]+"|name:起点"+"&destination="+route[3]+","+route[2]+"&mode=driving&coord_type=wgs84&src=HUBU|SmartParking#Intent;scheme=bdapp;package=com.baidu.BaiduMap;end");cordova.startActivityForResult((CordovaPlugin) this,intent, 200);} catch (URISyntaxException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}至此插件的开发就完成了,下面来进行测试:
1、在assets/www目录下的index.html添加如下内容:
<!DOCTYPE html><html> <head> <title>Notification Example</title> <script type="text/javascript" charset="utf-8" src="cordova.js"></script> <script type="text/javascript" charset="utf-8"> document.addEventListener("deviceready", onDeviceReady, false); function onDeviceReady() { // Empty } //导航 function navigate() { var longtOrig = 114.324775; var latOrig = 30.580747; var longtDes = 114.390421; var latDes = 30.501860; navigator.HUBUNavigate.startNavigating(longtOrig,latOrig,longtDes,latDes); } </script> </head> <body> <p><a href="#" onclick="navigate(); return false;">navigate</a></p> </body> </html>添加一个a标签,在其点击事件中调用我们的导航插件。
2、将项目打包成apk,然后安装到手机上。同时确保手机上安装了最新的百度地图客户端。
3、运行打包好的app,界面如下:
点击navigate后,调用百度地图客户端,并根据传递的起点终点参数,规划好路径,如下图所示:
这时已经是百度地图了,点击右下角的导航,就可以进行导航了,如下图所示:
退出百度地图后,返回到我们app中,结果如下:
一切都运行正常,至此我们的插件开发就完成了!
百度LBS提供的服务有很多,大部分都可以集成到PhoneGap插件中来,例如POI查询,地图标注,地址及逆地址查询等等。上面涉及的一些函数可以查看cordova的官网,里面有详细的说明,地址如下:http://docs.phonegap.com/en/2.9.0/guide_plugin-development_index.md.html#Plugin%20Development%20Guide
参考链接:
1、http://blog.csdn.net/aaawqqq/article/details/20401111
2、http://blog.csdn.net/happyflyingave/article/details/25182369
- PhoneGap插件开发---基于百度LBS的导航插件(三)
- PhoneGap插件开发---基于百度LBS的导航插件(一)
- PhoneGap插件开发---基于百度LBS的导航插件(二)
- phonegap插件开发API
- phonegap插件开发讲解
- PhoneGap 3.4插件开发
- Phonegap iOS 插件开发
- Phonegap插件开发攻略
- PhoneGap插件开发流程
- iOS 的Phonegap 插件开发 详解
- phonegap插件的实现
- 百度lbs导航
- IOS下Phonegap 插件开发
- 开发第一个phonegap插件
- PhoneGap插件开发示例(iOS)
- phonegap 2.9版本插件开发
- PhoneGap 12 插件开发指南
- PhoneGap插件开发示例(iOS)
- LinkedList基本用法
- 字符串的排列
- mybatis实战教程(mybatis in action),mybatis入门到精通
- Android应用通用线程
- 连接池
- PhoneGap插件开发---基于百度LBS的导航插件(三)
- SSH2框架搭建
- Tomcat配置
- java国际化
- C#时间相关
- Spark学习笔记之-Spark远程调试
- 日经春秋 20150901
- UITablView上下滑动控制底部按钮的出现和消失
- html页面倒计时