PhoneGap插件开发 js与Java之间的交互例子 详解
来源:互联网 发布:linux 的阿莫 编辑:程序博客网 时间:2024/06/06 13:06
PhoneGap中js与Java之间相互调用有两种方式,分别是同步和异步。
1、同步方式:js调用Java类的方法,然后Java类的方法直接返回一个值给js端,这跟我们Java方法间的调用是差不多一个意思;
2、异步方式:js调用Java类的方法,但是Java类的方法可能要处理一系列的事情,比如请求数据,那么等Java类的方法执行完,通过回调把结果返回给js端,这就是异步方式,说白了其实就像是Android同步与异步的Http请求...
那么,js是如何来实现调用Java方法呢?其实就是采用PhoneGap插件方式,下面就以Android为例,来谈一谈js与java之间的交互~
开发环境搭建请参考PhoneGap 开发环境搭建,PhoneGap版本采用的是最新版 PhoneGap2.9.1
PhoneGap底层框架的实现,请参考另一篇文章,你绝对会有收获的!!PhoneGap 底层框架实现原理详解
首先导入phonegap-2.9.1\lib\android\framework这个Library,以及phonegap-2.9.1\lib\android\test这个测试工程~结构如图所示
第一步,创建一个自定义插件类MyPlugin,继承CordovaPlugin,然后重写其execute方法,因为js默认就是调用MyPlugin的execute方法~~
package org.apache.cordova;import org.apache.cordova.api.CallbackContext;import org.apache.cordova.api.CordovaPlugin;import org.json.JSONArray;import org.json.JSONException;import android.util.Log;public class MyPlugin extends CordovaPlugin {private String helloAction = "helloAction";@Overridepublic boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {Log.i("test", action);if (action.equals(helloAction)) {callbackContext.success("congratulation,success");return true;} else {callbackContext.error("sorry,error");return false;}}}
第二步,打开我们项目的res/xml/config.xml文件,增加以下内容~
<feature name="MyPlugin"> <param name="android-package" value="com.newland.phonegap.MyPlugin"/> </feature>
第三步,修改cordova.android.js,添加以下代码,注意添加的位置!!
/** * 自定义插件*/cordova.define("cordova/plugin/console",function(require, exports, module) {var exec = require('cordova/exec');var modulemapper = require('cordova/modulemapper');var console = {hello:function(msg){exec(function(succseeMsg){ // 成功的回调方法alert(succseeMsg);},function(errorMsg){ // 出错的回调方法alert(successMsg);},"MyPlugin","helloAction",[]);}};module.exports = console;});define("cordova/plugin/console/symbols", function(require, exports, module) {var modulemapper = require('cordova/modulemapper');modulemapper.clobbers('cordova/plugin/console', 'console');});注意代码添加的位置(后面那几个括号),否则会影响其他代码的功能...这里附上一张截图~~
第四步,修改main.js,在“deviceready”初始化执行的函数后面,添加一句调用插件的代码
var deviceInfo = function() { document.getElementById("platform").innerHTML = device.platform; document.getElementById("version").innerHTML = device.version; document.getElementById("uuid").innerHTML = device.uuid; document.getElementById("name").innerHTML = device.name; document.getElementById("width").innerHTML = screen.width; document.getElementById("height").innerHTML = screen.height; document.getElementById("colorDepth").innerHTML = screen.colorDepth; var el = document.getElementById("cordova"); if (el) { el.innerHTML = device.cordova; } console.hello("helloAction"); // 调用插件};run起来~~弹出了成功的回调,搞定~~~~~~~~~~~~~~
最后,附上修改后的Demo代码,运行有问题的可以下载下来看看:PhoneGap2.9.1插件开发 Demo下载
环境搭建有问题或者报错的可以参考这两篇博客:
PhoneGap 工程导入出错的解决办法
完美解决Error initializing Cordova:Class not found
- PhoneGap插件开发 js与Java之间的交互例子 详解
- Android开发中java与javascript交互:PhoneGap插件vs addJavascriptInterface
- Android开发中java与javascript交互:PhoneGap插件vs addJavascriptInterface
- iOS 的Phonegap 插件开发 详解
- Phonegap跨平台开发JS与Android的交互(本地)
- Android与Js的简单交互例子
- iOS UIWeb与JS之间的交互
- OC与JS之间的交互
- WebView与JS之间的交互
- android 与JS之间的交互
- android与js之间的交互
- android 与JS之间的交互
- OC与JS之间的交互
- phoneGap开发IOS,JS调用IOS方法/phoneGap插件开发
- Java与js的交互
- java与JS的交互
- Lua与Java相互交互的例子
- AsWing 与 Java 之间的交互
- 深入浅出-iOS程序性能优化
- python string转为dict --- json.loads
- 软件测试心得
- 1002. A+B for Polynomials
- 黑马程序员——Java基础语法---流程控制语句
- PhoneGap插件开发 js与Java之间的交互例子 详解
- Linux命令执行顺序控制与管道
- 【iOS】Xib的使用与File'Owner总结
- 详解定位以及布局冲突问题
- Spring基本知识1
- iOS开发之NewsstandKit.framework的使用
- 第四周 项目5 猴子选大王
- printf宏定义
- 学会生活