Cordova插件开发


1.    使用node.js创建一个cordova工程

Cordova create Ncores com.example.demoNcores

然后进入Ncores文件夹下,添加android平台

Cordova platform add android

至此android平台已经添加完毕

然后添加cordova 官方的一些插件

Cordova plugin add org.apache………..

…….

第一步准备工作完成

2.    创建自己的插件

首先新建一个文件夹 com.example.demo.numcores

文件夹下添加doc src www三个子文件夹

doc是一些文档描述 (可选)

src (必选)是原生代码文件夹 在src下新建android 和ios等各种平台文件夹,android下是java文件 即NumCoresPlugin.java

ios我暂未写

www(必须选)下新建一个js文件numcores.js

plugin.xml(必选)

这个是开发插件最重要的配置文件

这个plugin.xml文件可以参看任意的一个插件的plugin.xml 架构完全一样

 

下面罗列了我这个插件开发的plugin.xml

<?xmlversion="1.0" encoding="utf-8"?>

<pluginxmlns="http://www.phonegap.com/ns/plugins/1.0"

 xmlns:android="http://schemas.android.com/apk/res/android"

 id="com.example.demo.numcores"

  version="0.0.1">

   <name>NumCoresPlugin</name>

   <description>NumCoresPlugin Description</description>

   <author>lt</author>

    <license>Apache 2.0License</license>

    <engines>

        <engine name="cordova"version=">=3.0.0" />

    </engines>

<!--  js文件地址,会被默认加载到首页面(index.html),通过clobbers元素的定义把就是的module.exports自定赋给window对象。  -->

    <js-modulesrc="www/numcores.js" name="numcores">

        <clobberstarget="NumCores" />

    </js-module>

    <!--  添加了平台Android -->

    <platform name="android">

<!--java文件地址      source-file 和config-file

这里是插件的配置信息,最后会添加到res/xml/config.xml 文件中,并且src/android/NumCoresPlugin.java,复制到 android 的 package 包中

   -->

<source-file src="src/android/NumCoresPlugin.java"target-dir="src/com/example/demo/numcores" />

        <config-filetarget="res/xml/config.xml" parent="/*">

  <!-- 

 exec(<successFunction>,<failFunction>, <service>, <action>, [<args>]);

<featurename="<service_name>">

 <param name="android-package"value="<full_name_including_namespace>" />

         </feature> 

 --> 

<feature name="NumCores">

<param name="android-package"value="com.example.demo.numcores.NumCoresPlugin"/>

           </feature>

        </config-file>

       

        <config-filetarget="AndroidManifest.xml" parent="/*">

        <uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/>  

               <uses-permissionandroid:name="android.permission.READ_EXTERNAL_STORAGE"/>  

               <uses-permissionandroid:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/> 

        </config-file>

    </platform>

</plugin>

 

这之间需要特别关注地方已经用不同颜色标注出来了

3.     写js文件

numcores.js文件如下:

 

cordova.define("com.example.demo.numcores.numcores",function(require, exports, module) {   //JavaScript Document

varcordova = require('cordova');

//varNumberCores =function(){};

varNumCores = function() {};

NumCores.prototype.say= function() {

    alert("NumberCores!");

};

//获取手机CPU单核多核代码  <feature name="NumCores">   

//  private int getNumCores() {}

NumCores.prototype.getNumCores= function(success, error) {

    cordova.exec(success, error, 'NumCores','getNumCores', []);

};

 

varnumbercores = new NumCores();

module.exports= numbercores;

});

index.html加载的就是plugin www下的js文件 无需再手动添加 会自动加载

关于error

之前老是出 uncaught Reference:NumberCores is not defined的错误

不出结果

原因是由于html文件,

在html文件中会提及 原因并不是出在js文件上的NumberCores没有与  cordova.exec(success, error, 'NumCores','getNumCores', [ ]  );中的NumCores对应导致 而是由于clobbers

 

4.    html文件

核心:

  function getNumber(){

 //NumberCores.getNumCores(onSucc,onFai); 如果用这个出不来结果 这个NumberCores 对应的是clobbers  并不是js中全局变量的方法名  已测  也不是我之前想的service name

 NumCores.getNumCores(onSucc,onFai);

              }

   function onSucc(result){

  alert(result);

                }

function onFai(error) {

      console.log("onFileError:" + error.code);

                }

这个地方的NumCores 不是来源于js文件的全局方法名字 而是来源于clobbers  这就是报错的缘由

5.    java文件  (参看cordova的官方文档 )

其中java文件当中插件需要实现 需要使用以下两种方法

1) initialize

 

Plugins should usethe initialize method for their start-up logic.

@override
publicvoid initialize(CordovaInterface cordova,CordovaWebView webView) {
    super.initialize(cordova, webView);
    // your init code here
}

2) execute

Writing anAndroid Java Plugin

A JavaScript callfires off a plugin request to the native side, and the corresponding Javaplugin is mapped properly in the config.xml file, but what does the finalAndroid Java Plugin class look like? Whatever is dispatched to the plugin withJavaScript's exec function is passed into the plugin class's execute method.Most execute implementations look like this:

6.    @Override
    publicboolean execute(String action,JSONArray args,CallbackContext callbackContext)throwsJSONException {
        if ("beep".equals(action)) {
            this.beep(args.getLong(0));
            callbackContext.success();
            returntrue;
        }
        returnfalse;  // Returningfalse results in a "MethodNotFound" error.
    }

3)在写出原生代码 实现功能 

方法:getNumCores()

现在就可以将插件通过命令行的方式加入到cordova的工程中

 

 

6.    测试      :       

Ok





代码下载处  http://download.csdn.net/detail/u011394553/7963393  

要积分的表喷我   


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值