Developing a Plugin on Android
http://docs.phonegap.com/en/2.5.0/guide_plugin-development_android_index.md.html#Developing%20a%20Plugin%20on%20Android
詳細介紹請直接點上面的地址,我這裏只揀最最實用的。
js中插件的使用需要以如下的形式調用方法,分別是回調成功函數,回調失敗函數,佈置在java端的服務,action(這個咋翻譯。。),和參數列表。
exec(<successFunction>, <failFunction>, <service>, <action>, [<args>]);
插件的部署,還用說麼。。。
<plugin name="<service_name>" value="<full_name_including_namespace>"/>
接下來上實例。
1,部署插件,寫在config.xml裏。
<plugin name="Echo" value="org.apache.cordova.plugin.Echo" />
2,java端實現,就是收到頁面傳遞過來的參數後做什麼處理
import org.apache.cordova.api.CordovaPlugin;
import org.apache.cordova.api.PluginResult;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
/**
* This class echoes a string called from JavaScript.
*/
public class Echo extends CordovaPlugin {
@Override
public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {
if (action.equals("echo")) {
String message = args.getString(0); //這裏接收頁面參數,按傳參的順序
this.echo(message, callbackContext); //傳參時把當前的回調上下文傳過去,必不可少
return true;
}
return false;
}
private void echo(String message, CallbackContext callbackContext) {
if (message != null && message.length() > 0) {
callbackContext.success(message);
//json對象也可以當作參數傳回到頁面
// JSONObject jsono = new JSONObject();
// jsono.put("message",message);
// callbackContext.success(jsono);
} else {
callbackContext.error("Expected one non-empty string argument.");
}
}
}
3,js實現,就是頁面的傳值和回調,挺好理解的吧。
cordova.exec(successFunction, failFunction, "Echo","echo",[message]); //無參就寫[],多個參數的順序一定不能搞錯
function successFunction(e){
alert(e); //e就是傳遞的message
//如果在callbackContext.success中傳遞的是json對象,這裏也可以直接讀取。
// e.message
}
function failFunction(e){
//與successFunction同理,取決於callbackContext.error中傳遞的信息。
}
4,實用的就是這樣,還有一點不能理解的是跟線程有關的,還是放在這裏吧。第二種異步執行不跟上面講的是一個效果麼。。。
If you need to interact with the UI, you should use the following:
@Override
public boolean execute(String action, JSONArray args, final CallbackContext callbackContext) throws JSONException {
if ("beep".equals(action)) {
final long duration = args.getLong(0);
cordova.getActivity().runOnUiThread(new Runnable() {
public void run() {
...
callbackContext.success(); // Thread-safe.
}
});
return true;
}
return false;
}
If you do not need to run on the UI thread, but do not want to block the WebCore thread:
@Override
public boolean execute(String action, JSONArray args, final CallbackContext callbackContext) throws JSONException {
if ("beep".equals(action)) {
final long duration = args.getLong(0);
cordova.getThreadPool().execute(new Runnable() {
public void run() {
...
callbackContext.success(); // Thread-safe.
}
});
return true;
}
return false;
}
以上。