由于工作的需要,所以我接触到了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自定义插件下载地址

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

  1. android 开发打赏布局,Android自定义View模仿虎扑直播界面的打赏按钮功能

    Android自定义View模仿虎扑直播界面的打赏按钮功能 发布时间:2020-09-28 12:15:53 来源:脚本之家 阅读:77 作者:shenhuniurou 前言 作为一个资深篮球爱好者, ...

  2. Android 自定义gradle插件

    android自定义gradle插件的步骤 1.首先我们新建一个android项目 2.然后新建一个android module a.删除一些不需要的文件目录,然后新建groovy,resources ...

  3. h5前端调用android拍照功能,H5调用Android拍照和摄像以及选取相册

    之前一直认为H5调用Android,H5不需要Android配合能直接实现功能.前段时间,自己做这个功能,才发现不是这么回事. H5编写 html文件里只需要标签即可实现代码,代码如下所示: 拍照 ο ...

  4. android利用反射调用截屏api,Android利用反射机制调用截屏方法和获取屏幕宽高的方法...

    想要在应用中进行截屏,可以直接调用 View 的 getDrawingCache 方法,但是这个方法截图的话是没有状态栏的,想要整屏截图就要自己来实现了. 还有一个方法可以调用系统隐藏的 screen ...

  5. java 打开url连接访问不了,android 应用Java自带的HttpURLConnection 连接网络 读取返回数据...

    android 使用Java自带的HttpURLConnection 连接网络 读取返回数据 @Override protected void onCreate(Bundle savedInstanc ...

  6. Android学习之省份城市县区选择+向上一级活动返回数据

    json数据使用的是郭霖大神的json数据:http://guolin.tech/api/china/ 连网权限 <uses-permission android:name="andr ...

  7. android开发rn插件,在Android原生应用中嵌入React Native

    开发工具:Android Studio , WebStorm 参考链接:React Native官方中文文档 一.创建React Native项目 1.在本地React Native项目目录下,创建一 ...

  8. android 华为裁剪全图,调用Android原生裁剪方式裁剪图片并保存

    前言 Android提供了原生的裁剪方式,并输出裁剪后的资源到相应的目录.主要有两种方式,下面我们来看看这两种方式. 由于Android10提出分区储存,我们这里为了方便暂不使用分区储存,通过使用 a ...

  9. android 自定义view 硬件加速,Android自定义View(八) -- 硬件加速

    Android自定义View(八) – 硬件加速 今天学习自定义View部分的最有一篇:硬件加速因为无法录制GIF,所以本篇内容基本为原博 本文计划根据HenCoder系列文章进行学习,所以代码风格及 ...

最新文章

  1. 零起点学算法22——华氏摄氏温度转换
  2. 修改aconda镜像服务器,Jupyter安装链接aconda的实现方法
  3. explode 无分隔符_使用PHP explode()函数时出现“空分隔符”警告
  4. C++ Primer 5th笔记(chap 10)泛型算法 :算法形参
  5. .net 把一个对象赋值给一个参数_Java:new一个对象的过程中发生了什么?
  6. 干货!这可能是你见过最全的 Python 时间处理方法总结
  7. 供应商寄售库存管理_【论文解读】物流联合外包下库存管理模式对供应链运作的影响...
  8. 【C语言简单说】十:小结
  9. 剑指offer:33-37记录
  10. 重构手册阅读笔记:重构的含义
  11. 蓝桥杯2013c++真题:排它平方数
  12. VGG16—perceptual loss in keras感知损失【Keras】
  13. html图表实现,用 Flotr2 实现的 HTML5 图表
  14. EDA365 V2.5下载
  15. 关于微信小程序使用WebSokect
  16. 网络安全-典型的恶意代码
  17. Elasticsearch 7.7.0 高阶篇-聚合技术
  18. kvm 虚拟机与宿主机通信
  19. mysql dump 拒绝访问_mysqldump访问被拒绝
  20. 为什么画出的人物是平面,怎样才能画出有立体感的人物

热门文章

  1. Shape-Aware Meta-Learning 在模型泛化中引入形状约束
  2. 关于定时任务一个批次起止时间的算法设计与实现
  3. html如何让table表格垂直(上下)居中
  4. Altium Designer PCB电路板设计总结
  5. 【Nginx】配置中 resolver 指令的使用
  6. Linux数据库管理与应用
  7. DWR服务器推 教程
  8. Python——爬虫抓取图片
  9. BIM家装族库丨艺术家具族
  10. 挖矿木马应急响应指南