cordova自定义弹窗教程插件

cordova自定义插件

注意:存放自定义cordova插件目录不能有空格可能会报错


一 .cordova安装

1.下载node.js,安装完成后你可以在命令行中使用node和npm.

安装cordova使用node.js的npm工具。打开控制台输入:npm install -g cordova

二.安装plugman

cordova需要用plugman来创建自定义插件  命令:npm install -g plugman

三.用cordova创建android工程

1.创建cordova工程

现在电脑上新建一个cordova文件夹 ,在文件中执行命令: cordova creatr dialog com.jcy.android

文件夹中会多一个文件夹这就是你的cordova工程

dialog 是工程名 com.jcy.android 是cordova工程的包名

创建插件

创建成功后的目录:

插件目录

2.生成android工程

先进入到刚刚创建的cordova目录中,然后开始创建android工程。

命令:cordova platform add android

android --> 创建的平台名也可以是iOS等

下图是创建成功的情况,失败的原因有可能是android的环境没有配好。

生成android工程的目录

生成android工程的目录

工程目录

生成之后我们开始导入到android studio中:

第一步:选择打开本地已有的android工程。

导入工程1

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

导入工程2
目录结构

至此就已经把cordova插件开头的部分创建好了。

四.创建自定义插件

先在电脑上创建一个cordova插件的目录,然后跳转到该目录,开始创建cordova插件。

创建自定义插件
plugman create --name dialog-plugin --plugin_id dialog-plugin --plugin_version 1.0.0

--name dialog-plugin --> 插件名

--plugin_id dialog-plugin --> 插件ID

--plugin_version 1.0.0 --> 插件版本号

生成插件的目录如下

toast-plugin

。src

    。android

        。android的目录

    。www

编写ToastDemo.java用于被调用

可以在刚刚创建的Android工程下面编写这个代码,具体代码如下:

execute方法是插件被调用时,会把操作和参数以及回调传递过来

代码:

package com.jcy.android;

import android.app.AlertDialog;

import android.content.DialogInterface;

import android.content.Intent;

import android.provider.MediaStore;

import org.apache.cordova.CallbackContext;

import org.apache.cordova.CordovaArgs;

import org.apache.cordova.CordovaPlugin;

import org.json.JSONException;

import static android.media.MediaRecorder.VideoSource.CAMERA;

public class CustomDialog extends CordovaPlugin {

@Override
    public boolean execute(String action, CordovaArgs args, final CallbackContext callbackContext)throws JSONException {
if("show".equals(action)){
AlertDialog.Builder builder =new AlertDialog.Builder(cordova.getActivity());
            builder.setTitle("提示");
            builder.setMessage(args.getString(0));
            builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
     public void onClick(DialogInterface dialog, int which) {
            dialog.dismiss();
                    //Toast.makeText(cordova.getContext(),"点击了确定",Toast.LENGTH_SHORT).show();
                    openCamra();
                    callbackContext.success("点击了确定");
                }
});
            builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
    public void onClick(DialogInterface dialog, int which) {
            dialog.dismiss();
              //Toast.makeText(cordova.getContext(),"点击了取消",Toast.LENGTH_SHORT).show();
               callbackContext.error("点击了取消");
                }
});
            builder.create().show();
              return true;
        }
return super.execute(action, args, callbackContext);
    }
private void openCamra(){
CordovaPlugin cordovaPlugin =null;
        Intent camera =new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        cordova.startActivityForResult(cordovaPlugin,camera,CAMERA);
    }
}

把这个文件复制到刚刚生成的插件目录下


文件复制路径

编辑plugin.xml文件

修改plugin.xml,代码都有注释,如下:

<?xml version='1.0' encoding='utf-8'?>
<plugin id="dialog-plugin" version="1.0.0" xmlns="http://apache.org/cordova/ns/plugins/1.0" xmlns:android="http://schemas.android.com/apk/res/android">
    <name>dialog-plugin</name>
    <js-module name="dialog-plugin" src="www/dialog-plugin.js">
        <clobbers target="CustomDialog" />
    </js-module>
    <!--添加Android平台  -->
    <platform name="android">
        <config-file target="res/xml/config.xml" parent="/*">  
            <!-- JS调用时的名字 -->
            <feature name="CustomDialog">  
                <!-- value:的值是对应的插件中CustomDialog.java存放的路径 --> 
                <param name="android-package" value="com.jcy.android.CustomDialog"/>
            </feature>  
        </config-file>  
        <!-- src:是插件里存放对应.java的路径, target-dir:安装插件时把.java文件存放的位置,要和上面的value路径对应 -->
        <source-file src="src/android/CustomDialog.java" target-dir="src/com/jcy/android" />
    </platform>
</plugin>

编辑www目录下的toast-plugin.js文件

修改为:

varexec =require('cordova/exec');
// ToastShow: 是plugin.xml文件中的feature标签 name属性
// show:是js中调用的方法名// [arg0]: 表示一个参数,[arg0,arg1]:表示两个参数
exports.show =function(arg0, success, error)
{ 
 exec(success, error,'CustomDialog','show', [arg0]);
};

五.初始化插件

进入到插件目录,初始化插件 命令 npm init

效果图如下,输入信息时有括号的按照括号里面的输入,没有的可以跳过。

初始化插件

六.向项目中添加自定义插件

上面基本上就完成了一个简单的自定义插件的制作,接下来把插件添加到之前创建的Android工程中测试,制作是否成功。

添加的方法和上面一样,先进入到platforms目录下

然后输入 cordova plugin add D:\newDialog\dialog-plugin

D:\newDialog\dialog-plugin 新建插件的目录

添加成功

添加成功

然后在Android studio中调用测试。调用方式通俗的讲就是dialog-plugin.js文件中的那两个参数。

先在 index.html 中加

<button id="dialog" style="font-size:24px">弹窗</button >

在index.js 调用

示例

注意 :CustomDialog.show("参数","success","error");
1.suceess:成功回调
2.error:失败回调
3.顺序一定不能错!!!!
成功!

示例

七.注意

1.命令最好用管理员运行

2.提示 Android target 和Gradle 未安装

image

缺少环境变量

新建 变量名:Android_Platform_Tools 变量值 :Android sdk 目录下找到 platform-tools 全路径加进去

再将 Android_Platform_Tools 添加到Path中

完美解决!

基础内容大概就这些 大家有疑问可以在评论中问,看到了会回复,有错误也欢迎指出,共同学习。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,427评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,551评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,747评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,939评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,955评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,737评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,448评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,352评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,834评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,992评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,133评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,815评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,477评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,022评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,147评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,398评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,077评论 2 355

推荐阅读更多精彩内容