• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

Cordova 插件开发Android

武飞扬头像
yxz30
帮助5

1、创建Cordova插件类

    新建java类,继承org.apache.cordova.CordovaPlugin。

import org.apache.cordova.CallbackContext; 

import org.apache.cordova.CordovaInterface;

import org.apache.cordova.CordovaPlugin;

import org.apache.cordova.CordovaWebView;

import org.json.JSONArray;

import org.json.JSONException;

public class Demo extends CordovaPlugin {

 @Override

 public void initialize(CordovaInterface cordova, CordovaWebView webView) {

  // TODO Auto-generated method stub

  super.initialize(cordova, webView);

 }

  

 @Override

 public boolean execute(String action, JSONArray args,

   CallbackContext callbackContext) throws JSONException {

  // TODO Auto-generated method stub

  return super.execute(action, args, callbackContext);

 }

  

}

2、编写插件功能

   编写插件功能需要实现在 execute(String action, JSONArray args,CallbackContext callbackContext) 方法。

import org.apache.cordova.CallbackContext;

import org.apache.cordova.CordovaInterface;

import org.apache.cordova.CordovaPlugin;

import org.apache.cordova.CordovaWebView;

import org.json.JSONArray;

import org.json.JSONException;

public class Demo extends CordovaPlugin {

    private CordovaInterface cordova;

    @Override

    public void initialize(CordovaInterface cordova, CordovaWebView webView) {

        super.initialize(cordova, webView);

        this.cordova = cordova;

    }

     

    @Override

    public boolean execute(String action, JSONArray args,

            CallbackContext callbackContext) throws JSONException {

     

        final CallbackContext mCallback = callbackContext;

         

        if("hello".equals(action)){

            callbackContext.success("hello cordova!");

             

            //如果处理时较长的话需要使用线程异步处理

/*          cordova.getThreadPool().execute(new Runnable() {

                 

                @Override

                public void run() {

                    try {

                        Thread.sleep(1000);

                    } catch (InterruptedException e) {

                        e.printStackTrace();

                    }

                    mCallback.success("hello cordova!");

                }

            });*/

        }

        return true;

    }

     

}

先说一下execute返回值:

返回true指的是action命令成功接受(开始)处理,并不是action命令已处理完成。这里js是不会有任何处理的,真到Action完成处理调用 mCallback.success()后返回处理结果,js才会调用成功回调函数处理返回结果。

返回false就是action未成功接受或开始处理(如未知action命令),些时js会调用异步回调函数。

尽量使用异步处理:

插件功能处理如果耗时较长都应该使用异步处理,在execute中开启一个线程,处理完了调用mCallback.success(?)或mCallback.error(?)返回处理结果。

回调:

默认情问下成功调用插件功能必须返回一个结果,通过mCallback.success(?)或mCallback.error(?)回调的方式返回。便也技持无返回,或多次返回。

无回调:

//PluginResult.Status.NO_RESULT 不返回结果

PluginResult pluginResult = new PluginResult(PluginResult.Status.NO_RESULT);

//true:回调继续保持,即当前返回后后面还会有返回 false:回调结束,即当这个返回后不会再有返回

pluginResult.setKeepCallback(false);

callbackContext.sendPluginResult(pluginResult); 

多次回调:

//PluginResult.Status.OK/ERROR 返回状态。OK:Js调用成功回调方法. ERROR:Js调用异常回调方法 

PluginResult pluginResult = new PluginResult(PluginResult.Status.ERROR,"返回结果");

//true:回调继续保持,即当前返回后后面还会有返回 false:回调结束,即当这个返回后不会再有返回

pluginResult.setKeepCallback(true);

callbackContext.sendPluginResult(pluginResult); 

3、配置加载插件

  在res/xml/config.xml的widget中增加  

<feature name="Demo" >

        <param name="android-package" value="插件类名" ></param>

</feature>

name:为插件名称,在Js调用会使用到

4、js调用插件

通调exec调用

//加载依赖库

var cordova = require('cordova'),

    exec = require('cordova/exec');

//调用插件功能

exec(successCallback, errorCallback, "Demo", "hello", jsonstr);

successCallback:成功回调方法

errorCallback:失败回调方法

"Demo":插件名称,配制在config.xml:feature 属性 name;

"hello":action名称

jsonstr:参数,JSON格式

封装成友好的方法调用

demo_plugin.js

cordova.define("com.xxx.plugins.Demo", function(require, exports, module) {

     

var cordova = require('cordova'),

    exec = require('cordova/exec');

var Demo= function(){

     

}

Demo.prototype.connect=function(successCallback, errorCallback,jsonstr) {

    exec(successCallback, errorCallback, "Demo", "hello", jsonstr);

};

var demo= new Demo();

module.exports = demo;

});

在cordova_plugins.js module.exports中增加一项

 { 

        "file": "demo_plugins.js",

 //插件js路径

        "id": "com.xxx.plugins.Demo",

 //这里使用类名,其他也可以,只要不重复

        "clobbers": [

            "Demo"

 //Js插件对像名后,载入后通过这个名称调用 Demo.hello(.....);

        ]

    }

在cordova_plugins.js module.exports.metadata中增加一项

 "com.xxx.plugins.Demo": "1.0.0"

com.xxx.plugins.Demo必须和exports中的id一样。 

1.0.0:标识可随意

在HTML中调插件

<script type="text/javascript" src="https://blog.csdn.net/yxz30/article/details/cordova.js"></script>

<!--<script  type="text/javascript" src="https://blog.csdn.net/yxz30/article/details/cordova_plugins.js" ></script>-->

cordova.js必须引入.

cordova_plugins.js如果和cordova.js在同一目录下,会自动引入。

调用插件:

Demo.hello(function(data) {

    alert("成功=" data);

}, function(err) {

    alert("失败=" err);

},{data:124});

-------END-----

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhffiaia
系列文章
更多 icon
同类精品
更多 icon
继续加载