1. 程式人生 > >Android與js互動(四)自定義cordova外掛

Android與js互動(四)自定義cordova外掛

首先昨天我做測試的時候js端一直無法呼叫寫在js的方法後來查了資料才知道是在index.html中使用js時

需要刪除這一行

<meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: https://ssl.gstatic.c

然後就可以呼叫了。

好的第一步先在js中寫入呼叫Android端的方法:

我在html中放入了一個標題和一個按鈕:

        <div class="app">
            <h1><div id="content">內容顯示</div></h1>
            <h1>Apache Cordova</h1>
            <div id="deviceready" class="blink">
                <p class="event listening">Connecting to Device</p>
                <p class="event received">Device is Ready</p>
            </div>
            <input type="button"  value="點選呼叫java程式碼並傳遞引數" 	onclick="jsfunc2()"  />
        </div>
        <script type="text/javascript" src="cordova.js"></script>
        <script type="text/javascript" src="js/index.js"></script>

點選按鈕可以呼叫jsfun2()方法:

此方法如下:

    function jsfunc2(){
        window.cordova.exec(function(arg){
         document.getElementById('content').innerHTML=arg
          },function(){},'CordovaTest','click',[]);
        }
呼叫了exec的方法後就可以直接呼叫Android端的
CordovaTest
的外掛,並且傳入了引數click,那個arg引數是Android端傳回的引數可以是json可以是jsonarray也可以是一個string型別,

第二個function什麼也沒做這是一個error的回撥最右邊的【】是傳給android端的array陣列。

Android 端可以根據引數的不同實現各種各樣的方法。

這裡我只是列印了這個click在android端中

05-18 22:55:05.266 9746-9834/com.example.demo E/execute:: click
這個在js中的consolelog在Android端也是可以看到

我們來看Android端是如何實現一個外掛的和如何進行傳引數的

public class CordovaTest extends CordovaPlugin {
    @Override
    public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {
        Log.e( "execute: ",action );
        callbackContext.success("hello");
        return super.execute(action, args, callbackContext);
    }
}
上面自己寫一個類繼承cordovaplugin這個雷利可以直接使用cordova從而獲取到activity這些暫時不說。

這個args引數是個array型別這就是js端最後一個傳過來的引數

callbackcontext這個物件有兩個方法susscess和error分別可以告訴js端呼叫成功了或者失敗了的意思

js端在error和sucess中對應使用兩個方法,

action就是那個click的引數可以使用相同外掛不同action執行不同的方法,在具體專案中也是這麼實現的

上面就介紹了二者通訊的方法

接下來是如何使用自定義的外掛連線Android端和js端

在res/xml/config.xml中新增外掛:

  <feature name="CordovaTest">
        <param name="android-package" value="org.apache.cordova.camera.CordovaTest" />
    </feature>

name是外掛名字就是類名,value是路徑。

然後在根目錄下的android.json中新增:

 {
                            "xml": "<feature name=\"CordovaTest\"><param name=\"android-package\" value=\"org.apache.cordova.camera.CordovaTest\" /></feature>",
                            "count": 1
                        }
然後就可以實現了。

具體在android端的使用比較好寫

在js端的具體使用不是很清楚,所以我只是在index.html中實現了一些js 的方法來呼叫。

整個js與android的通訊就是這樣,js端的使用官網上我找不到示例,

如果有人有js端的官網的詳細說明請也告訴我謝謝!!!!