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中的注册声明
"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放上来。是一个扫码功能的扩展

你可能感兴趣的:(其他)