Android與js互動(四)自定義cordova外掛
阿新 • • 發佈:2019-01-26
首先昨天我做測試的時候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端是如何實現一個外掛的和如何進行傳引數的
上面自己寫一個類繼承cordovaplugin這個雷利可以直接使用cordova從而獲取到activity這些暫時不說。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); } }
這個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端的官網的詳細說明請也告訴我謝謝!!!!