博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PhoneGap插件开发流程
阅读量:5971 次
发布时间:2019-06-19

本文共 3155 字,大约阅读时间需要 10 分钟。

hot3.png

首先需要创建一个plugin.xml,可以参考下面的模板,我做了详细的注释:

    
    
Device
    
Cordova Device Plugin
    
Apache 2.0
    
cordova,device
    
    
    
        
    
    
        
    
            
                
    
                
                
    
        
    
    
        
    
    
    
        
        
            
            
                
                
            
        
        
        
        
    
接下来可以编写JS接口了:
//cordova.exec方法详解cordova.exec(function(winParam) {    //调用成功的回调},function(error){    //调用失败的回调},"service", //服务名"action", //方法名["firstArgument", "secondArgument", 42, false]);//以数组形式传递的参数
下面可以开始编写原生代码了,首先介绍Android部分
一个Android插件至少需要编写一个Java类继承CordovaPlugin类,并重写execute方法
插件是在第一次被调用时初始化,当然也可以配置在App启动时初始化,请参考上面的plugin.xml内容
package com.jiusem.plugins.window.JToast;public class JToast extends CordovaPlugin{    @Override    public void initialize(CordovaInterface cordova, CordovaWebView webView) {       super.initialize(cordova, webView);        //初始化的业务逻辑,如果有的话,比如可以完成一些服务的注册    }    @Override    //所有的JS调用都会由该方法进行处理    public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {        if ("beep".equals(action)) {             this.beep(args.getLong(0));            callbackContext.success();//执行成功回调,该方法是用户在JS调用时传入            return true; //记得返回值        }        return false;  // Returning false results in a "MethodNotFound" error.    }}
//在插件内获取当前ActivityActivity main = this.cordova.getActivity();//文档内说该方法和上面的功能相同Activity main = this.cordova.getContext();
插件并不会运行在webview的线程内,当然也可以实现让插件运行在webview的线程内
现阶段应该涉及不到这么深的内容,可以参考文档。
下面介绍iOS下原生代码的实现
一般来说,至少需要编写一个类继承自CDVPlugin并重写
同样在第一次调用时被初始化,也可以通过配置实现App启动时初始化
需要注意的是iOS下的WebView,标准名称为UIWebView
请看下面的代码示例
值得注意的是,iOS中没有类似于Android插件中的execute方法,方法是直接被调用的
如果需要在插件初始化时执行一些代码,可以重写pluginInitialize方法,
具体可以参见CDVPlugin.h与CDVPlugin.m的源代码
/********* Echo.h Cordova Plugin Header *******/#import 
@interface Echo : CDVPlugin- (void)echo:(CDVInvokedUrlCommand*)command;@end/********* Echo.m Cordova Plugin Implementation *******/#import "Echo.h"#import
@implementation Echo- (void)echo:(CDVInvokedUrlCommand*)command{CDVPluginResult* pluginResult = nil;NSString* echo = [command.arguments objectAtIndex:0];if (echo != nil && [echo length] > 0) {pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsString:echo];} else {pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR];}[self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];}@end

是不是瞬间凌乱,上面是Objective-C神一样的代码,它包含了两个文件Echo.h和Echo.m,前者是类的定义文件,

后者是实现文件。

好了,就介绍到这里,了解了这些内容,再去找一个现成的插件(越简单越好~),模仿着就可以编写自己的插件了。

转载于:https://my.oschina.net/crazymus/blog/378077

你可能感兴趣的文章
mysql开启binlog
查看>>
设置Eclipse编码方式
查看>>
分布式系统唯一ID生成方案汇总【转】
查看>>
并查集hdu1232
查看>>
Mysql 监视工具
查看>>
Linux Namespace系列(09):利用Namespace创建一个简单可用的容器
查看>>
博客搬家了
查看>>
Python中使用ElementTree解析xml
查看>>
jquery 操作iframe、frameset
查看>>
解决vim中不能使用小键盘
查看>>
Eclipse Java @Override 报错
查看>>
linux的日志服务器关于屏蔽一些关键字的方法
查看>>
mysql多实例实例化数据库
查看>>
javascript 操作DOM元素样式
查看>>
HBase 笔记3
查看>>
【Linux】Linux 在线安装yum
查看>>
Atom 编辑器系列视频课程
查看>>
[原][osgearth]osgearthviewer读取earth文件,代码解析(earth文件读取的一帧)
查看>>
使用dotenv管理环境变量
查看>>
Vuex学习
查看>>