自定义 Cordova插件(基础篇)
cordova自定义插件
注意:存放自定义cordova插件目录不能有空格可能会报错
cordova的安装
- 下载node.js,安装完成后你可以在命令行中使用node和npm.
 - 安装cordova使用node.js的npm工具。打开控制台输入
 
npm install -g cordova
-g是全局安装cordova。安装完成后就可以在命令行使用cordova命令。
安装plugman
cordova需要用plugman来创建自定义插件
命令:npm install -g plugman
用cordova创建android工程
1.创建cordova工程
首先在电脑中创建一个cordova工程的目录,然后进入到创建的目录里。之后就可以开始创建cordova工程,下面是创建工程的代码和实例图。
cordova create demo com.lmr.android
demo --> 工程名 —— com.lmr.android --> 包名

创建成功后的目录:

2.生成android工程
先进入到刚刚创建的cordova目录中,然后开始创建android工程。
cordova platform add android
android --> 创建的平台名也可以是iOS等
下图是创建成功的情况,失败的原因有可能是android的环境没有配好。

生成android工程的目录

生成之后我们开始导入到android studio中:
第一步:选择打开本地已有的android工程。

第二步:找到刚刚创建好的android工程导入。

导入之后目录如下:

至此就已经把cordova插件开头的部分创建好了。
使用cordova官方提供的插件
首先进入到创建好的android工程目录下,然后再进行添加插件操作:
cordova plugin add cordova-plugin-camera

添加成功后的Android目录的变化

使用增加的插件
可以在官网查到 cordova官网camera插件
使用插件的位置,在Android工程下找到index.html和index.js这两个文件。

在index.html文件中添加一个测试按钮。
<button id="test">test</button>

在index.js文件中添加:
//前面的test是之前那个button的按钮,后面的test是方法名,给按钮注册点击事件
document.getElementById("test").addEventListener("click",test);
//点击事件绑定的方法
function test(){
    //调用添加的camera插件
    // onSuccess:是调用成功的返回事件;onFail:是调用失败的返回事件
    navigator.camera.getPicture(onSuccess,onFail);
}
//成功的返回事件
function onSuccess() {
    console.log("Camera cleanup success.")
}
//失败的返回事件
function onFail(message) {
    alert('Failed because: ' + message);
}
然后运行起来项目,下面是我运行起来的效果。点击test按钮,会打开手机上的相机,效果图就不放了。

创建自定义插件
注意:创建插件是先cd到你要创建的目录下,存放自定义cordova插件目录不能有中午和空格可能会报错
先在电脑上创建一个cordova插件的目录,然后跳转到该目录,开始创建cordova插件。

plugman create --name toast-plugin --plugin_id toast-plugin --plugin_version 1.0.0
--name toast-plugin --> 插件名
--plugin_id toast-plugin --> 插件ID
--plugin_version 1.0.0 --> 插件版本号
生成插件的目录如下
- toast-plugin
- src
- android
- android的目录
 
 
 - android
 - www
 
 - src
 
编写ToastDemo.java用于被调用
可以在刚刚创建的Android工程下面编写这个代码,具体代码如下:
execute方法是插件被调用时,会把操作和参数以及回调传递过来。
package com.lmr.android;
import android.widget.Toast;
import org.apache.cordova.CallbackContext;
import org.apache.cordova.CordovaArgs;
import org.apache.cordova.CordovaPlugin;
import org.json.JSONException;
/**
 * ToastDemo
 *
 * @author lmr
 * @date 2018-08-19
 */
public class ToastDemo extends CordovaPlugin {
    @Override
    public boolean execute(String action, CordovaArgs args, CallbackContext callbackContext) throws JSONException {
        if ("show".equals(action)){
            // 获取activity和context --> cordova.getActivity()和cordova.getContext()
            Toast.makeText(cordova.getContext(),args.getString(0),Toast.LENGTH_SHORT).show();
            return true;
        }
        return false;
    }
}
把这个文件复制到刚刚生成的插件目录下

编辑plugin.xml文件
修改plugin.xml,代码都有注释,如下:
<?xml version='1.0' encoding='utf-8'?>
<plugin id="toast-plugin" version="1.0.0" xmlns="http://apache.org/cordova/ns/plugins/1.0" xmlns:android="http://schemas.android.com/apk/res/android">
    <name>toast-plugin</name>
    <js-module name="ToastShow" src="www/toast-plugin.js">
        <clobbers target="ToastShow" />
    </js-module>
    <!--添加Android平台  -->
    <platform name="android">
        <config-file target="res/xml/config.xml" parent="/*">
            <!-- JS调用时的名字 -->
            <feature name="ToastShow">
                <!-- value:的值是对应的插件中ToastDemo.java存放的路径 -->
                <param name="android-package" value="com.lmr.android.ToastDemo"/>
            </feature>
        </config-file>
        <!-- src:是插件里存放对应.java的路径, target-dir:安装插件时把.java文件存放的位置,要和上面的value路径对应 -->
        <source-file src="src/android/ToastDemo.java" target-dir="src/com/lmr/android" />
    </platform>
</plugin>
编辑www目录下的toast-plugin.js文件
打开后是这样的:
var exec = require('cordova/exec');
exports.coolMethod = function (arg0, success, error) {
    exec(success, error, 'toast-plugin', 'coolMethod', [arg0]);
};
修改为
var exec = require('cordova/exec');
// ToastShow: 是plugin.xml文件中的feature标签 name属性
// show:是js中调用的方法名
// [arg0]: 表示一个参数,[arg0,arg1]:表示两个参数
exports.show = function (arg0, success, error) {
    exec(success, error, 'ToastShow', 'show', [arg0]);
};
初始化插件
进入到插件目录,初始化插件
npm init
效果图如下,输入信息时有括号的按照括号里面的输入,没有的可以跳过。

向项目中添加自定义插件
上面基本上就完成了一个简单的自定义插件的制作,接下来把插件添加到之前创建的Android工程中测试,制作是否成功。
添加的方法和上面一样,先进入到platforms目录下
然后输入
// 插件的本地目录
cordova plugin add D:\CordovaPlugin\plugins\toast-plugin
添加成功

然后在Android studio中调用测试。调用方式通俗的讲就是toast-plugin.js文件中的那两个参数。
  ToastShow.show("123456");

成功!!

基础内容大概就这些,后面还会在写一个复杂一点的插件教程,大家有疑问可以在评论中问,看到了会回复,有错误也欢迎指出,共同学习。
自定义 Cordova插件(基础篇)的更多相关文章
- 自定义Cordova插件(基础篇)
		
cordova自定义插件 注意:存放自定义cordova插件目录不能有空格可能会报错 cordova的安装 下载node.js,安装完成后你可以在命令行中使用node和npm. 安装cordova使用 ...
 - Android H5混合开发(2):自定义Cordova插件
		
前言 Cordova虽然定义了很多基础的插件,供H5端使用原生设备的功能. 但是,如果业务相关的功能,需要提供给H5端使用,那么,就需要我们自定义插件了. 这个"自定义"不是指由A ...
 - Cordova入门系列(四)自定义Cordova插件--showToast
		
前三篇Cordova入门系列,简单讲解了Cordova,以及如何调用Cordova插件,今天我们讲解一下如何自己做一个插件. 自定义插件,就是自己写一些安卓java代码,然后和js代码以及配置文件,封 ...
 - 自定义 Cordova插件详解
		
一.Cordova的基础点 在混合式应用中,我们通过现有的Cordova插件,可以轻松的在 H5 上调用手机native的功能.现有的Cordova插件能满足平时大部分的开发需求,然而,有时候找不到合 ...
 - 自定义Cordova插件详解
		
一.Cordova的基础点 在混合式应用中,我们通过现有的Cordova插件,可以轻松的在 H5 上调用手机native的功能.现有的Cordova插件能满足平时大部分的开发需求,然而,有时候找不到合 ...
 - Eclipse插件基础篇一
		
名词翻译 有一些名词在翻译的过程中可能会出现歧义,在这里统一一下. アーキテクチャ=architecture=架构 プラットフォーム=platform=平台 コンポーネント=component=组件 ...
 - cordova学习-基础篇
		
Cordova 学习笔记(一):快速开始 1.安装cordova Cordova安装可以通过node.js从npm上获取.npm install -g cordova 通过这个命令可以安装cordov ...
 - 小猪猪逆袭成博士之C++基础篇(二) 常量、处理类型、自定义头文件
		
小猪猪逆袭成博士之C++基础篇(二) const .auto. decltype 上一章我们介绍了一些常用的类型和常见的问题,下面再介绍一些学习的时候不是特别常用但是在实际工程中很有用的一些东西. 一 ...
 - Cordova与现有框架的结合,Cordova插件使用教程,Cordova自定义插件,框架集成Cordova,将Cordova集成到现有框架中
		
一.框架集成cordova 将cordova集成到现有框架中 一般cordova工程是通过CMD命令来创建一个工程并添加Android.ios等平台,这样的创建方式可以完整的下载开发过程中所需要的的插 ...
 
随机推荐
- 干了这杯Java之HashMap
			
类: public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneab ...
 - 输入参数的默认值设定${3:-var_d}
			
今天看到一个不一样的写法: if [ $# != 2 ] && [ $# != 3 ] ; then #判断参数个数 echo "Invalid Args" ...
 - IR2104s半桥驱动使用经验
			
多次使用IR2104s,每次的调试都有种让人吐血的冲动.现在将使用过程遇到的错误给大家分享一下,方便大家找到思路. 一.自举电容部分(关键) 1.听说自举电路必须要安装场效应管,于是我在使用过程中,安 ...
 - 《ASP.NET Core In Action》读书笔记系列四 创建ASP.NET Core 应用步骤及相应CLI命令
			
一般情况下,我们都是从一个模板(template)开始创建应用的(模板:提供构建应用程序所需的基本代码).本节使用 Visual Studio 2017 .ASP.NET Core2.0和 Visua ...
 - work-7.2
			
安装ubuntu,jdk ,git,maven,Intellij. 配置GIT时,需要将在本地生成的公钥粘贴到服务端. 先占个座,具体过程待补充. -------------------------- ...
 - Python基础训练题-简单数学公式
			
1.在100内,将遇到被7除余数为0的都显示PASS: n=1 while n < 101: if n % 7 == 0: pass print('pass') else: print(n) n ...
 - CentOS7编译安装SVN(subversion1.9.7)
			
参考连接0:http://www.programering.com/a/MDMzYDMwATg.html参考连接1:http://www.zsythink.net/archives/13180.系统信 ...
 - js 字符串操作
			
1.charCodeAt方法返回一个整数,代表指定位置字符的Unicode编码. strObj.charCodeAt(index) 说明: index将被处理字符的从零开始计数的编号.有效值为0到字符 ...
 - 2018-2019-2 《网络对抗技术》Exp2 后门原理与实践
			
2018-2019-2 <网络对抗技术>Exp2 后门原理与实践 1. 后门原理与实践实验说明及预备知识 一.实验说明 任务一:使用netcat获取主机操作Shell,cron启动 (0. ...
 - vue打包app嵌入h5,区分app进入和android,ios显示不同的下载链接
			
vue打包app嵌入h5,区分app进入和android,ios显示不同的下载链接 需求:自己app打开的登录页面不显示app下载链接.其他地方打开判断android手机的跳转到android下载页链 ...