android自定义Dcloud插件,调用android原生界面并获取返回数据

由于工作的需要,所以我接触到了Dcloud这个我不是很愿意接触的东西。Dcloud也是Webapp的一个工具,同样也可以用来做原生android的插件。比较一下Dcloud和Cordova的优缺点:

     1,Dcloud的文档说的比较简单,一般来说,让人看不懂该如何开始;cordova的文档则说的比较详细,从创建工程到创建插件再到使用插件,都有详细步骤说明。

    2,Dcloud是以Cordova为模板的产物,但是Dcloud的项目的健壮性却不如Cordova,举个例子,在Dcloud的插件中,onActivityResult()这个回调是不起作用的,也就是说要想让webapp页面获取由他启动的native界面的返回结果,只能依靠其他手段,而Cordova插件则做的很好,用户可以在插件的onActivityResult()中直接获取返回结果,并通过callback返回给js层。

     3,Dcloud文档虽然说得简单,但是看透之后只要你会使用,其实整个过程相对来说比cordova要简单一些,即使如此,我仍然推荐大家使用Cordova插件~。

 

言归正传,Dcloud插件开发过程如下:

1,首先导入从Dcloud插件官网下载的基座工程HBuilder_Hello;下载地址http://download.dcloud.net.cn/Android-SDK@1.9.9.45003_20180511-4.zip

2,使用android studio导入这个hbuidler-hello工程(这样做的原因是因为DCloud太垃圾了,连向Cordova那样通过命令行来生成项目模板的功能都没有,但是它又有不同于常规android项目的目录结构,实在是蠢),删除app/libs目录下不需要的jar包,那些jar包都是其他插件使用到的,不需要的话可以全部删除,但是主要保留lib.5plus.base-release.aar这个文件,这是Dcloud的核心库文件。

3,编写java类,注意这个java累需要继承StandardFeature类,这个类就是原生插件类。

4,声明插件类:在src/data目录下的dcloud_properties.xml中声明插件类,例如:

<feature name="CallLoginLocalPlugin" value="io.dcloud.H5A657E2B.CallLoginLocalPlugin"></feature>

5,注册(部署)插件到应用中:在src/HelloH5/www目录中的manifest.json文件中注册插件,例如:

"CallLoginLocalPlugin":{
  "description": "调用原生android界面"
},注意CallLoginLocalPlugin为上一步的feature的name属性的值,description可以随便编写。

6,保持manifest.json文件中的id与src/data/dcloud_control.xml文件中的appId的值一致,如果都没有修改过就不要去动这两个东西。

7,在src/HelloH5/www/js目录下新建plugin.js文件,编写js插件代码,例如:   

document.addEventListener( "plusready",  function()
{
    var _BARCODE = 'CallLoginLocalPlugin',
        B = window.plus.bridge;
    var CallLoginLocalPlugin =
    {

        CallLoginLocalPluginFunction : 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, "CallLoginLocalPluginFunction", [callbackID, Argus]);
        }
    };
    window.plus.CallLoginLocalPlugin = CallLoginLocalPlugin;
}, true );

注意:这是个固定模板,复制过去把其中的"CallLoginLocalPlugin "和“CallLoginLocalPluginFunction ”关键字替换成自己项目中的就行,其中CallLoginLocalPlugin为在第四步中的feature的name的值。CallLoginLocalPluginFunction为第三步中java类中的将要由js插件端调用的方法名称。

8,编写js代码用来调用js插件端代码:

function pluginjump() {
           plus.CallLoginLocalPlugin.CallLoginLocalPluginFunction( ["Html5"], function(result) {alert( "hehe"       );},function(result){alert(result)});
           
       }

注意:plus.①.②:①表示第四步中声明的name的值,②为插件类的方法名。

9,编写index.html中代码,添加控件点击事件调用第八步中的js代码,例如:

    

<li id="open_native" οnclick="pluginjump()">
<span class="item">点击跳转原生界面
   <div class="chs">跳转原生界面</div>
</span>
    </li>

10,使用android studio重新编译运行该项目即可;

11,要想通过js调用netive的java代码(插件类除外)的方法或者属性的值,可以参考以下文档:js调用android原生代码。我这个项目中需要获取由这个webapp界面唤醒的原生界面的返回值,由于onactivityResult()方法没有,所以我目前只好参看这个文档,用纯js的方式获取返回结果。代码如下:

 html代码:
<li id="get_data" οnclick="getData()">
<span class="item">获取数据
   <div class="chs">获取跳转后原生界面数据</div>
</span>
    </li>

js代码:

function getData(){
var Test = plus.android.importClass("io.dcloud.H5A657E2B.MyData");
var test = new Test();
var name=plus.android.getAttribute(test,"name");
alert(name);
}

当然这个js代码也可以在插件类中调用如,例如:在CallLoginLocalPluginFunction()中,使用

pWebview.loadUrl("javascript:getData()");即可。

至此,Dcloud插件完成。

我的插件项目下载地址,大家仍然不懂的可以下来参考以下:我自己写的Dcloud自定义插件下载地址

 

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值