Hbuilder 5+Runtime与原生交互

实现目的:hbuilder,js方法调用原生方法,原生方法不是立即返回结果,某一时刻得到结果再传回给js,是一个异步的过程,如js调用原生的相机功能,原生完成一系列操作后,再把结果返回给js,是一个异步的过程。资料参考

官方文档 Android平台第三方插件开发指导 https://ask.dcloud.net.cn/docs/#//ask.dcloud.net.cn/article/66

异步返回JS扩展方法实现

在实现异步扩展方法时,开发者需要调用JS Plugin Bridge的plus.bridge.exec()方法,该方法会通知Native层插件执行指定方法,运行结果会通过回调的方式通知JS层

void plus.bridge.exec( String service, String action, Array args );
service: 插件类别名
action: 调用Native层插件方法名称。
args: 参数列表。

如何实现原生与hbuilder的交互,步骤如下:

1.自定义一个插件

<properties>
<features>
<feature name="Barcode" 
<feature name="pluginbridge" value="com.***.***.ui.hbuilder.PluginBridge"/>
</features>
</properties>

2.编写相互调用的js文件,test.js代码如下

document.addEventListener( "plusready", function()
{
var _BARCODE = 'pluginbridge',
B = window.plus.bridge;
var plugintest =
{
PluginTestFunctionArrayArgu : function (Argus, successCallback, errorCallback )
{
var success = typeof successCallback !== 'function' ? null : function(args)
{
successCallback(args);
},
fail = typeof errorCallback !== 'function' ? null : function(code)
{
errorCallback(code);
};
callbackID = B.callbackId(success, fail);
return B.exec(_BARCODE, "webToPickPhoto", [callbackID, Argus]);
}
};
window.plus.plugintest = plugintest;
}, true );

注意 exec 才是异步,,execSync 是同步。本例子异步

3.原生java代码

public class PluginBridge extends StandardFeature {
	private volatile static PluginBridge mInstance = new PluginBridge();
	private IWebview pWebview;
	private String CallBackID;
	public static PluginBridge getInstance() {
		return mInstance;
	}
	public void webToPickPhoto(IWebview pWebview, JSONArray array){
		mInstance.pWebview = pWebview;
		mInstance.CallBackID = array.optString(0);
		JSONArray newArray = null;
		try {
			newArray = new JSONArray( array.optString(1));
			String inValue1 = newArray.getString(0);
			String inValue2 = newArray.getString(1);
			String inValue3 = newArray.getString(2);
			String inValue4 = newArray.getString(3);
		} catch (JSONException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		loadJs("返回给js的值是  哈哈哈哈");
	}
	public void loadJs(String param){
		JSUtil.execCallback(mInstance.pWebview, mInstance.CallBackID, param, JSUtil.OK, false);
	}
}

4.引入test.js,,调用原生方法

js代码
<script src="js/test.js"></script>
plus.plugintest.PluginTestFunctionArrayArgu(["Html5","Plus","SyncFunction","MultiArgument!"], 
function( result ) {
	alert( result );
},function(result){
	alert(result)
});

以上步骤做完,原生就可以跟hbuidler进行相互交互。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值