PhoneGap 4.2.0-0.24.2(Cordova 4.3.0)插件指南

PhoneGap 4.2.0-0.24.2(Cordova 4.3.0)插件指南

1.    前言

        利用phonegap的擴展可以實現用web API調用手機的本地功能,如二維碼掃描,拍照等。而由於 phonegap 升級較快,在 3.X 之後改變了它的插件機制,所有調用手機原生的功能全部以外部插件的形式提供,創建 phonegap 項目之後不再能夠直接調用系統功能 API 如 camera ,device 等,所以必須以插件的形式引入到項目中來,才能夠使用。

2.    使用第三方插件

>  cordova plugin searchkeyword(搜索相關keyword插件)

 

> cordova plugin addorg.apache.cordova.device
> cordova plugin add org.apache.cordova.console

> cordova plugin ls


插件可以從很多地方安裝:

第三方插件庫:http://plugins.cordova.io/#/


插件名(從plugin repository下載):cordova plugin addorg.apache.cordova.console
git地址:cordovaplugin add https://git-wip-us.apache.org/repos/asf/cordova-plugin-camera.git
本地地址:cordova plugin add d:\cordova-3.3.0\cordova-plugin-camera
本地文件:cordova plugin add plugin.tar.gz
指定版本
cordova plugin add [email protected]
cordova plugin add https://github.com/apache/cordova-plugin-console.git#r0.2.0
cordova plugin add https://github.com/someone/aplugin.git#:/my/sub/dir
cordova plugin add https://github.com/someone/aplugin.git#r0.0.1:/my/sub/dir
等等

3.    自定義插件

(1)   新建class文件(插件類),繼承CordovaPlugin,重寫execute()方法:

Echo.java

import android.util.Log;

 

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;

 

/**

 * Created by Rickyon 3/9/2015.

 */

public class Echo extends CordovaPlugin {

 

   //初始化

    @Override

    public voidinitialize(CordovaInterface cordova, CordovaWebView webView) {

       super.initialize(cordova, webView);

        // yourinit code here

    }

 

    @Override

    publicboolean execute(String action, JSONArray args, CallbackContext callbackContext)throws JSONException {

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

           String message = args.getString(0);

           this.echo(message, callbackContext);

           return true;

        }

        returnfalse;

    }

 

    private voidecho(final String message, final CallbackContext callbackContext) {

        /**

         * Theplugin's JavaScript does not run in the main thread of the WebView interface;

         * instead,it runs on the WebCore thread, as does the execute method.

         * If youneed to interact with the user interface, you should use the followingvariation:

         */

       cordova.getActivity().runOnUiThread(new Runnable() {

           @Override

           public void run() {

                if(message != null && message.length() > 0) {

                   Log.e("messageis","......................"+message);

                   callbackContext.success(message);

               } else {

                   callbackContext.error("Expected one non-empty stringargument.");

               }

            }

            /**

             * Usethe following if you do not need to run on the main interface's thread,

             * but donot want to block the WebCore thread either:

             *

             *cordova.getThreadPool().execute(newRunnable() {

             *    public void run() {

             *   ...

             *   callbackContext.success(); // Thread-safe.

             *    }

             *});

             */

        });

    }

 

}

(2)   在JS中調用Native code:

(注:cordova.exec(successcallback,  failcallback,  service,  action,  array);爲JavaScript調用Nativ code的入口,其通過匹配service在config.xml文件中對應的文件位置(包),找到對應的Java文件,並執行裏面的execute方法。其中successcallback和failcallback分別爲成功或者失敗時要調用的function,service爲插件名,action爲js要完成的動作,array爲Json信息)

echo.js

window.echo = function(str, callback) {

   cordova.exec(callback,  function(err){callback('Nothing to echo.'); },  "Echo", "echo",  [str]);

}


(3)   在index.html中調用js代碼:

(注:1、addEventListener爲cordova中的API事件監聽器;2、得監聽deviceready事件,否則插件不起作用。)

index.html

<script>

            document.addEventListener("deviceready",onDeviceReady, false);

           function onDeviceReady() {

               window.echo("Hello,Plugin!", function(echoValue) {

                   alert(echoValue == "Hello,Plugin!");

               });

            }

</script>


(4)   在config.xml中註冊插件:

(注:feature的name爲上面cordova.exec()中Service,一般使用java文件名。而com.oocl.myapplication.echo爲Echo.java文件的位置。Param的name等於onload,表示app的webview加載時也加載。)

config.xml

 <!--Plugins -->

    <featurename="Echo">

       <param name="android-package"value="com.oocl.myapplication.plugins.Echo" />

       <param name="onload" value="true" />

   </feature>


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章