dcloud html5 sdk,DCloud H5与Android Native的交互--5+ SDK插件开发

DCloud 5+ SDK插件开发

http://ask.dcloud.net.cn/docs/#http://ask.dcloud.net.cn/article/66

开发文档的链接

首先官方文档这方面描述的不太清楚,走了不少弯路,下面的评论很重要!!!

此外提醒下官方Android-SDK下的HBuilder-Integrate项目里有一个小demo,com.example.H5PlusPlugn+assets/H5Plugin;可以跟着看看。

下面记录下几个主要的要点;

jar包的制作

1.写原生的Android代码,首先这部分需要把HBuilder-Integrate项目中的库文件so文件等拷贝过来,需要用到里面的包;我是直接在这个项目做的扩展插件;打包的时候把src里不是的代码java删掉即可。此外这部分主要注意资源文件的获取,有两种方案。

第一种资源用以下方式获取

public static int getIdByName(Context context, String className, String name) {

String packageName = context.getPackageName();

Class r = null;

int id = 0;

try {

r = Class.forName(packageName + ".R");

Class[] classes = r.getClasses();

Class desireClass = null;

for (int i = 0; i < classes.length; ++i) {

if (classes[i].getName().split("\\$")[1].equals(className)) {

desireClass = classes[i];

break;

}

}

if (desireClass != null)

id = desireClass.getField(name).getInt(desireClass);

} catch (ClassNotFoundException e) {

e.printStackTrace();

} catch (IllegalArgumentException e) {

e.printStackTrace();

} catch (SecurityException e) {

e.printStackTrace();

} catch (IllegalAccessException e) {

e.printStackTrace();

} catch (NoSuchFieldException e) {

e.printStackTrace();

}

return id;

}

第二种,按照平时的方法获取但是要在io.dcloud.RInformation.java里声明

2.打包成jar文件(export-java-jar文件;只需打包src下的即可)。

资源导入

将原生的代码中用的png图片、xml布局文件导入项目;同时声明使用到的权限

H5方面的对接

1.mainfest.json与assets/data/properties.xml中的注册声明

name="twotest"

value="com.example.H5PlusPlugin.TwoDemo" />

"twotest": {

"description": "Two test"

}

2.层层调用

html中的调用

plus.twotest.PluginTestFunctionArrayArgu( [["11000001","2016-11-1 10:10:10"],["11000002","2016-11-1 10:10:10"],["11000003","2016-11-1 10:10:10"],["11000004","2016-11-1 10:10:10"]],15, function( result ) {alert( result );},function(result){alert(result)});

js中实现该方法,注意twotest字段,跟前面注册声明的需一致

document.addEventListener( "plusready", function()

{

var _BARCODE = 'twotest',

B = window.plus.bridge;

var twotest =

{

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, "PluginTestFunctionArrayArgu", [callbackID, Argus]);

}

};

window.plus.twotest = twotest;

}, true );

原生java文件,继承StandardFeature,实现PluginTestFunctionArrayArgu 方法

/**

*

*/

package com.example.H5PlusPlugin;

import org.json.JSONArray;

import org.json.JSONException;

import com.mining.app.zxing.mqr_codescan.MipcaActivityCapture;

import android.app.Activity;

import android.content.Context;

import android.content.Intent;

import android.os.Bundle;

import io.dcloud.common.DHInterface.IWebview;

import io.dcloud.common.DHInterface.StandardFeature;

import io.dcloud.common.util.JSUtil;

/**

*@author Administrator

*

*/

public class TwoDemo extends StandardFeature{

/**

*@Title: onStart

*@Description: TODO

*@param@param arg0

*@param@param arg1

*@param@param arg2

*@throws

*/

@Override

public void onStart(Context arg0, Bundle arg1, String[] arg2) {

// TODO Auto-generated method stub

super.onStart(arg0, arg1, arg2);

}

public void PluginTestFunctionArrayArgu(IWebview pWebview, JSONArray array)

{

String ReturnString = null;

String 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);

ReturnString = inValue1 + "-" + inValue2 + "-" + inValue3 + "-" + inValue4;

} catch (JSONException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

JSUtil.execCallback(pWebview, CallBackID, ReturnString, JSUtil.OK, false);

}

}

最后把我写的demo放上来。是一个扫码功能的扩展

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值