您好,登錄后才能下訂單哦!
前言
現(xiàn)在phonegap雖然提供了很多中插件API,但難免會(huì)不夠全,不夠滿(mǎn)足我們的需求!這時(shí)候我們就可以通過(guò)自己編寫(xiě)插件來(lái)完善這些功能。
phonegap的插件主要分兩部分:一部分是前臺(tái)頁(yè)面js調(diào)用插件的接口,還有一部分就是后臺(tái)做的處理。
下面我以我寫(xiě)的一個(gè)刪除文件功能為例,先來(lái)看前臺(tái)js代碼:
removefile : function(path,cb){ //定義插件刪除方法 window.deletebook = function(path, callback) { //自定義插件的核心 cordova.exec(callback, function(err) { callback('Nothing to echo.'); }, "MyEcho", "deletebook", [path]); }; //調(diào)用插件刪除方法 document.addEventListener("deviceready", onDeviceReady, false); function onDeviceReady() { window.deletebook(path, function(echoValue) { //console.log(echoValue + " success"); if(echoValue == "true"){ cb(); } }); } }
插件的核心在于cordova.exec(successCB,failedCB,pluginName,action,data);
這個(gè)函數(shù)中五個(gè)參數(shù)分別為:
successCB 調(diào)用成功后的回調(diào)函數(shù)
failedCB 調(diào)用失敗后的回調(diào)函數(shù)
pluginName 插件名
action 插件方法
data 調(diào)用插件向后臺(tái)傳遞的參數(shù),格式為數(shù)組
接下來(lái)我們來(lái)看一下后臺(tái)的代碼:
package org.apache.cordova; import org.apache.cordova.api.CallbackContext; import org.apache.cordova.api.CordovaPlugin; import org.join.messenger.MessageCode; import org.json.JSONArray; import org.json.JSONException; import android.os.Bundle; import com.lemote.ebook.Ebook; public class MyEcho extends CordovaPlugin { @Override public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException { System.out.println("================action:"+action); if(action.equals("deletebook")){ System.out.println("deletebook!"); String filepath = args.getString(0); String returninfo = "false"; String whole_filepath = "/mnt/sdcard/"+filepath; System.out.println("whole_filepath:"+whole_filepath); if(MyFileUtil.removeFile(whole_filepath)){ System.out.println("刪除成功!"); returninfo = "true"; } this.echo(returninfo, callbackContext); return true; } return false; } //調(diào)用回調(diào)函數(shù),返回成功 private void echo(String message, CallbackContext callbackContext) { if (message != null && message.length() > 0) { callbackContext.success(message); } else { callbackContext.error("Expected one non-empty string argument."); } } }
execute(String action, JSONArray args, CallbackContext callbackContext)中三個(gè)參數(shù)分別為:
action 插件方法
args 傳遞過(guò)來(lái)的參數(shù),獲取方法為args.getString(數(shù)組中的位置
);
callbackContext 回調(diào)函數(shù)
回調(diào)成功的函數(shù)callbackContext.success(message)
回調(diào)失敗的函數(shù)callbackContext.error(message)
除了前臺(tái)js接口和后臺(tái)方法,還有一個(gè)非常重要的就是串聯(lián)前后臺(tái)的東西:
在res/xml/config.xml中加入如下代碼:
<plugin name="MyEcho" value="org.apache.cordova.MyEcho" />
"MyEcho"為前臺(tái)js調(diào)用的pluginName
"org.apache.cordova.MyEcho"為插件在后臺(tái)的類(lèi)文件
這樣phonegap插件還做不到的就可以通過(guò)自己編寫(xiě)java代碼來(lái)實(shí)現(xiàn)了!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。