天天看點

jsbridge android 回調,Android與Js通信之JsBridge再封裝

文末有demo工程和相關lib,附帶aar

Android與Js通信的文章已經太多,而且都寫的非常詳細,這裡隻針對使用JsBridge的庫進行二次封裝使用進行介紹,使用簡單。

為什麼使用JsBridge?

Android 調用 Js 的方法 - Android 沒法拿到傳回值

Android調用Js方法時,需要手寫完整的Js腳本和參數,出錯幾率大

Js無法知道調用Android本地方法成功與否,需要Android再次調用相關的Js方法,增加前端和Android開發的互動難度。

JsBridge是'大頭鬼'為Android與Js互動寫的一個通用庫,解決了Android無法通過回調與Js互動的問題,并且封裝了Android與Js雙向的調用方法。

JsBridge 開源位址:https://github.com/lzyzsd/JsBridge

使用步驟

1引入library依賴/導入aar并依賴/直接複制lib中所有的類和assets檔案夾下的js注入檔案到工程、(由于隻是對開源庫進行的封裝,是以不再釋出到jCenter和mavenCentral)

2 将布局檔案中的WebView控件替換為BridgeWebView

jsbridge android 回調,Android與Js通信之JsBridge再封裝

圖2-1

3 初始化工具類,将bridgeWebView傳入

WebViewTools webViewTools = new WebViewTools(webView);

4-1 Js調用Android方法

注意:Js和Android方法的第一個參數需要兩端保持一緻,并且Js代碼必須使用window.WebViewJavascriptBridge.callHandler(x,y,function(data))這種類型的方法,因為在Android端進行的Js檔案的注入,如果不用該方法,Android端則與Js無法與正确互動

//Js代碼

//Js方法第一個參數為兩端約定好的方法名

//第二個參數為傳遞給Android的資料内容,String類型

//第三個參數為function回調

function testClick1() {

//喚起本地方法

window.WebViewJavascriptBridge.callHandler(

'callNative'

, {'data': 'data com from Js'}

, function(responseData) {

//responseData是Android回調給Js的資料

//注意responseData隻能是String類型

}

);

}

//Android端代碼

//第一個參數為兩端約定好的方法名

//第二個參數為方法回調

webViewTools.registerWebViewFunction("callNative", new JsCallBack() {

@Override

public void notifyNativeMethod() {

//喚起本地功能

}

@Override

public void JsData(String data) {

Log.d("WebViewTools", "Js傳遞過來的資料"+data);

}

@Override

public void CallBack(CallBackFunction function) {

function.onCallBack("傳遞給Js的資料内容");

}

});

4-2Android調用Js方法

注意:Js和Android方法的第一個參數需要兩端保持一緻,并且Js代碼必須使用 bridge.registerHandler(x, function(data, responseCallback){}因為在Android端進行的Js檔案的注入,如果不用該方法,Android端則與Js無法與正确互動

//Js代碼

bridge.registerHandler("callJs", function(data, responseCallback) {

//data為Android端傳遞過來的資料

responseCallback("回調給Android的資料");

});

//Android端代碼

webViewTools.callWebFunction("callJs", "data from Java", new JavaCallBack() {

@Override

public void onJsResponse(String data) {

Log.d("webViewTools", "Js的回調資料" + data);

}

});

這樣就完成了Android和Js的雙向調用,并且雙向都能通過回調進行相應的資料互動。因為暫時隻是使用了雙向的通信方法,更多的配置和使用請檢視原項目位址:JsBridge

相關資料: