Cordova系列之插件的使用以及自定义插件

这篇具有很好参考价值的文章主要介绍了Cordova系列之插件的使用以及自定义插件。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

在上一篇博客初探Cordova中介绍了下Cordova,并创建了个Cordova的项目运行了下,文章中也说到插件是Cordova比较核心的东西了,本篇博客主要开看一下插件怎么用以及怎么自定义插件

Cordova插件的使用

首先官方已经提供了一些插件,同时第三方插件也非常多,可以在 官方网页 上自己搜索需要的插件。
Cordova系列之插件的使用以及自定义插件

这里我就随便找两个插件用一用,插件的使用非常简单,按照文档来即可。

先用个电量状态的插件
按照文档走,需要先添加插件,在项目根目录执行命令即可

cordova plugin add cordova-plugin-battery-status

执行完毕后项目中会新增一些文件
首先是多了一个目录 org.apache.cordova ,里面存放了刚才新添加插件的Android代码。
Cordova系列之插件的使用以及自定义插件
然后config文件中也会增加相应的配置。
Cordova系列之插件的使用以及自定义插件
然后www目录中增加了插件相关的js代码
Cordova系列之插件的使用以及自定义插件
插件新增好之后我们就可以正常使用了。下面直接改下前端代码就可以了。
代码很简单
Cordova系列之插件的使用以及自定义插件
修改index.js
Cordova系列之插件的使用以及自定义插件
然后运行
Cordova系列之插件的使用以及自定义插件
可以看到,插件的使用非常简单,Cordova确实能极大的帮助开发者快速实现H5跟原生之前的通信。

下面我们再使用个 相机 的插件看看。
步骤一样,先添加插件

cordova plugin add cordova-plugin-camera

然后按照文档编写前端代码
Cordova系列之插件的使用以及自定义插件
编写js
Cordova系列之插件的使用以及自定义插件
运行
Cordova系列之插件的使用以及自定义插件

其他插件使用方式都类似,大致步骤都是先添加插件,然后调Api即可。

自定义Cordova插件

除了使用官方或三方提供的插件,很多时候我们还需要自定义插件去处理一些业务相关的逻辑。
首先还是先看一下官方对插件的定义:https://cordova.apache.org/docs/en/11.x/guide/hybrid/plugins/index.html

这里我挑重点说

  • Cordova插件就是js跟原生进行交互的桥梁,主要方向是js调原生
  • 插件至少包含两部分,js代码和原生代码,js负责导出方法给前端调用,原生负责实现业务逻辑以及通知js执行结果
  • js调原生最终都是通过cordova.exec执行的

然后再去看一下 官方的安卓插件开发指南

同样直说重点

  • Android的插件类需要继承CordovaPlugin,重写execute(String action, JSONArray args, CallbackContext callbackContext) 方法,原生的业务逻辑在该方法中实现
  • js执行 cordova.exec 最终就是执行了原生这边的 execute 方法

知道了大致流程之后,就可以创建插件了,如果你对插件的目录及文件非常熟悉,当然是可以自己一个一个新建了,但是建议还是使用 官方提供的工具plugman 去创建,以免写错。

步骤如下

  • 安装pluginman,建议使用 sudo npm install -g plugman 安装,以免出现权限问题
  • 安装完毕后可以看下plugman有哪些指令,plugman -help , 然后plugman create -help
  • Cordova系列之插件的使用以及自定义插件
    根据命令描述得知创建插件的指令就是 plugman create --name 插件名 --plugin_id 插件id --plugin_version 插件版本

那么就简单了,自己找一个合适的目录存放新建的插件,然后切换到该目录执行创建插件的命令,例如

plugman create --name CustomerPlugin  --plugin_id com-yzq-customer-plugin  --plugin_version 1.0.0

执行完毕后会创建一个目录,该目录就是插件的初步结构

Cordova系列之插件的使用以及自定义插件

其中,www下的CustomerPlugin.js就是上面说到的插件两部分中的js代码部分,负责导出方法给前端调用,内部执行了exec方法,稍微调整一下代码,方便后面调用

var exec = require('cordova/exec');

/**
 * 导出一个方法给前端调用 coolMethord就是方法名
 * @param arg0 传递的参数
 * @param success 成功的回调
 * @param error 失败的回调
 */
exports.coolMethod = function (arg0, success, error) {
    /**
     * CustomerPlugin 就是指定要调用原生的类名
     * coolMethod 是action,一般在原生代码中会根据该值进行判断执行不同的逻辑
     */
    exec(success, error, 'CustomerPlugin', 'coolMethod', [arg0]);
};

还有一个plugin.xml,主要是插件的配置,具体的配置项可以看 plugin.xml官方文档
配置说明如下

<?xml version='1.0' encoding='utf-8'?>
<plugin id="com-yzq-customer-plugin" version="1.0.0" xmlns="http://apache.org/cordova/ns/plugins/1.0"
        xmlns:android="http://schemas.android.com/apk/res/android">
    <name>CustomerPlugin</name>
    <!--js-module指定进行通信的js接口 src就是接口文件的路径-->
    <js-module name="customer-plugin" src="www/CustomerPlugin.js">
        <!--clobbers target是前端调用时的名字,可自行更改-->
        <clobbers target="customer_plugin"/>
    </js-module>
</plugin>

好了,js部分的代码有了,下面就是添加各端的原生代码了,这里只演示Android平台。
首先在新建好的插件目录里执行 plugman platform add --platform_name android 命令,随后src目录中就会多出一个android目录,里面的CustomPlugin类就是我们Android同学需要写的代码了。
Cordova系列之插件的使用以及自定义插件

最后,执行 npm init -yes 来生成一个package.json ,创建完毕后自行修改package.json里的信息。
Cordova系列之插件的使用以及自定义插件

到这里,插件就创建好了。
下面就跟之前使用官方插件一样,把创建好的插件导入到项目中即可。

cordova plugin add 你的插件路径

执行完毕后回到Android项目中就会发现相应的文件都添加好了。
Cordova系列之插件的使用以及自定义插件
最后把目录结构调整下,记得config.xml里的配置要看一下是否正确。

剩下的就是一些业务代码了,先看CustomerPlugin里的代码

package com.yzq.cordovademo.plugin;

import android.widget.Toast;

import org.apache.cordova.CordovaPlugin;
import org.apache.cordova.CallbackContext;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;


/**
 * @author yuzhiqiang (zhiqiang.yu.xeon@gmail.com)
 * @description 自定义的cordova插件
 * @date 2023/3/26
 * @time 15:09
 */

public class CustomerPlugin extends CordovaPlugin {

    /**
     * js 最终会调用到execute方法
     *
     * @param action          The action to execute.
     * @param args            The exec() arguments.
     * @param callbackContext The callback context used when calling back into JavaScript.
     * @return
     * @throws JSONException
     */
    @Override
    public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {
        /*一般根绝传过来的action匹配,做不同的逻辑*/
        if (action.equals("coolMethod")) {
            String message = args.getString(0);
            this.coolMethod(message, callbackContext);
            return true;
        }
        return false;
    }

    private void coolMethod(String message, CallbackContext callbackContext) {
        Toast.makeText(cordova.getActivity(), "插件方法被调用了", Toast.LENGTH_SHORT).show();
        if (message != null && message.length() > 0) {
            /*成功回调给js*/
            callbackContext.success("nativa调用完成");
        } else {
            /*错误回调给js*/
            callbackContext.error("Expected one non-empty string argument.");
        }
    }
}

原生代码写好之后剩下的就是前端调用就可以了,这里就简单用一下,还是在之前项目的基础上进行添加的代码。
页面很简单,加个按钮
Cordova系列之插件的使用以及自定义插件
js中正常调用即可
Cordova系列之插件的使用以及自定义插件
看下效果

Cordova系列之插件的使用以及自定义插件

可以看到,h5可以正常调用到原生的方法了。

至此,一个简单的自定义插件就完成了。

示例代码放到github上了,需要的可以自行查看: CordovaDemo

下一篇:突破必须继承Activity的限制,支持在Fragment中使用Cordova以及任何个性化ui,组件化开发,简单易用,详情请看。 Cordova系列之化繁为简:打造全场景适用的Cordova组件


感谢阅读,觉有有帮助点赞支持,如果有任何疑问或建议,欢迎在评论区留言。如需转载,请注明出处:喻志强的博客 ,谢谢!文章来源地址https://www.toymoban.com/news/detail-420065.html

到了这里,关于Cordova系列之插件的使用以及自定义插件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【c语言】详解c语言#预处理期过程 | 宏定义前言

    c语言系列专栏: c语言之路重点知识整合   创作不易,本篇文章如果帮助到了你,还请点赞支持一下♡𖥦)!!  主页专栏有更多知识,如有疑问欢迎大家指正讨论,共同进步! 给大家跳段街舞感谢支持!ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ 代码编译到执

    2024年02月01日
    浏览(36)
  • 使用cordova 打包的app 如何让视频横屏播放 video

    Cordova插件“cordova-plugin-screen-orientation”设置移动端横屏播放video视频 cordova官网可显示详细的介绍

    2024年02月12日
    浏览(32)
  • HarmonyOS4.0系列——07、自定义组件的生命周期、路由以及路由传参

    允许在生命周期函数中使用 Promise 和异步回调函数,比如网络资源获取,定时器设置等; 即被@Entry 装饰的组件生命周期,提供以下生命周期接口: onPageShow 页面加载时触发,页面每次显示时触发一次,包括路由过程、应用进入前台等场景。 onPageHide 从第一个页面跳转第二个

    2024年01月21日
    浏览(31)
  • 使用vscode远程登录以及本地使用的配置(插件推荐)

    远程ssh添加第三方插件:vscode下链接远程服务器安装插件失败、速度慢等解决方法_vscode远程安装不上扩展_Emphatic的博客-CSDN博客 转到定义,选中代码-鼠标右键-转到定义 或者 F12;逐级退出,快捷键Alt+-(alt+左箭头) MinGW-w64 - for 32 and 64 bit Windows - Browse Files at SourceForge.net ①下

    2024年02月13日
    浏览(26)
  • 使用Java开发Jmeter自定义取样器(Sampler)插件

    Jmeter提供默认界面(AbstractJavaSamplerClient)和自定义界面的(AbstractSamplerGui)两种自定义取样器的插件开发方式,对于复杂的压测任务,可以通过自定义取样器的方式来实现。 本文通过压测SpringBoot的http接口演示两个自定义扩展类的实现方式: maven项目工程,pom.xml http接口示例

    2024年02月11日
    浏览(30)
  • 5分钟教你使用idea调试SeaTunnel自定义插件

    在用Apache SeaTunnel研发SM2加密组件过程中,发现社区关于本地调试SeaTunnel文章过于简单,很多情况没有说明,于是根据自己遇到问题总结这篇文档。SeaTunnel本地调试官方文档,希望对大家有所帮助! 使用的引擎为Flink(不需要下载,SeaTunnel中有加载依赖),输入输出方式为:mysql

    2024年03月20日
    浏览(35)
  • 【Flowable】FlowableUI使用以及在IDEA使用flowable插件(二)

    前言 之前有需要使用到Flowable,鉴于网上的资料不是很多也不是很全也是捣鼓了半天,因此争取能在这里简单分享一下经验,帮助有需要的朋友,也非常欢迎大家指出不足的地方。 一、部署FlowableUI 1.准备war包 在这里提供了:点击下载 提取码:uup7 2.Tomcat 这里就不展示怎么安

    2024年02月09日
    浏览(30)
  • 使用Mybatis自定义插件实现不侵入业务的公共参数自动追加

    后台业务开发的过程中,往往会遇到这种场景:需要记录每条记录产生时间、修改时间、修改人及添加人,在查询时查询出来。 以往的做法通常是手动在每个业务逻辑里耦合上这么一块代码,也有更优雅一点的做法是写一个拦截器,然后在Mybatis拦截器中为实体对象中的公共

    2024年02月04日
    浏览(32)
  • 使用Logstash过滤插件Grok自定义正则表达式模式并引用

    可以在样例数据: 192.168.10.1 GET /index.html 19876 0.234 中在增加一列,随便写点数字就可以。 现在的样例数据为: 192.168.10.1 GET /index.html 19876 0.234 52767 我们使用自定义的正则表达式模式来匹配数最后一列,前面五列照样使用内置模式来匹配。 将自定义的正则表达式写入到一个文

    2023年04月15日
    浏览(38)
  • 【Burp系列】Burp插件xssValidator的安装及使用

    1.1 下载Phantomjs 下载地址:http://phantomjs.org/download.html 下载后配置环境变量,把bin目录下的这个exe加入环境变量.如图: 1.2 xss.js下载和配置 xss.js是phantomJS检测xss 漏洞payload的具体实现。下载地址为:https://github.com/nVisium/xssValidator 下载完成后,将xss.js放在phantomjs同一个文件夹下

    2024年02月04日
    浏览(24)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包