PhoneGap插件开发 js与Java之间的交互例子 详解

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";

	@Override
	public 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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值