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自定义插件下载地址
android自定义Dcloud插件,调用android原生界面并获取返回数据相关推荐
- android 开发打赏布局,Android自定义View模仿虎扑直播界面的打赏按钮功能
Android自定义View模仿虎扑直播界面的打赏按钮功能 发布时间:2020-09-28 12:15:53 来源:脚本之家 阅读:77 作者:shenhuniurou 前言 作为一个资深篮球爱好者, ...
- Android 自定义gradle插件
android自定义gradle插件的步骤 1.首先我们新建一个android项目 2.然后新建一个android module a.删除一些不需要的文件目录,然后新建groovy,resources ...
- h5前端调用android拍照功能,H5调用Android拍照和摄像以及选取相册
之前一直认为H5调用Android,H5不需要Android配合能直接实现功能.前段时间,自己做这个功能,才发现不是这么回事. H5编写 html文件里只需要标签即可实现代码,代码如下所示: 拍照 ο ...
- android利用反射调用截屏api,Android利用反射机制调用截屏方法和获取屏幕宽高的方法...
想要在应用中进行截屏,可以直接调用 View 的 getDrawingCache 方法,但是这个方法截图的话是没有状态栏的,想要整屏截图就要自己来实现了. 还有一个方法可以调用系统隐藏的 screen ...
- java 打开url连接访问不了,android 应用Java自带的HttpURLConnection 连接网络 读取返回数据...
android 使用Java自带的HttpURLConnection 连接网络 读取返回数据 @Override protected void onCreate(Bundle savedInstanc ...
- Android学习之省份城市县区选择+向上一级活动返回数据
json数据使用的是郭霖大神的json数据:http://guolin.tech/api/china/ 连网权限 <uses-permission android:name="andr ...
- android开发rn插件,在Android原生应用中嵌入React Native
开发工具:Android Studio , WebStorm 参考链接:React Native官方中文文档 一.创建React Native项目 1.在本地React Native项目目录下,创建一 ...
- android 华为裁剪全图,调用Android原生裁剪方式裁剪图片并保存
前言 Android提供了原生的裁剪方式,并输出裁剪后的资源到相应的目录.主要有两种方式,下面我们来看看这两种方式. 由于Android10提出分区储存,我们这里为了方便暂不使用分区储存,通过使用 a ...
- android 自定义view 硬件加速,Android自定义View(八) -- 硬件加速
Android自定义View(八) – 硬件加速 今天学习自定义View部分的最有一篇:硬件加速因为无法录制GIF,所以本篇内容基本为原博 本文计划根据HenCoder系列文章进行学习,所以代码风格及 ...
最新文章
- 零起点学算法22——华氏摄氏温度转换
- 修改aconda镜像服务器,Jupyter安装链接aconda的实现方法
- explode 无分隔符_使用PHP explode()函数时出现“空分隔符”警告
- C++ Primer 5th笔记(chap 10)泛型算法 :算法形参
- .net 把一个对象赋值给一个参数_Java:new一个对象的过程中发生了什么?
- 干货!这可能是你见过最全的 Python 时间处理方法总结
- 供应商寄售库存管理_【论文解读】物流联合外包下库存管理模式对供应链运作的影响...
- 【C语言简单说】十:小结
- 剑指offer:33-37记录
- 重构手册阅读笔记:重构的含义
- 蓝桥杯2013c++真题:排它平方数
- VGG16—perceptual loss in keras感知损失【Keras】
- html图表实现,用 Flotr2 实现的 HTML5 图表
- EDA365 V2.5下载
- 关于微信小程序使用WebSokect
- 网络安全-典型的恶意代码
- Elasticsearch 7.7.0 高阶篇-聚合技术
- kvm 虚拟机与宿主机通信
- mysql dump 拒绝访问_mysqldump访问被拒绝
- 为什么画出的人物是平面,怎样才能画出有立体感的人物