AndroidJS相互呼叫詳解
Android JS相互呼叫詳解
最近在研究Android、JS相互呼叫,之前沒怎麼接觸過,只知道loadUrl()就可以載入一個網頁了,研究過之後發現Android可以調JS,JS也可以調Android原生控制元件,很開心啊。下面小編就開始嘍:
原理就是Java和JS呼叫,在Android中是通過WebView來實現的。
下面先說一下簡單的Android和JS相互呼叫
首先通過loadurl()來載入網頁
WebView開啟JS指令碼執行
Android端提供JS呼叫的互動介面
簡單的看一下程式碼:
mWebView=(MyWebView)findViewById(R.id.wv_container_information);
mWebSetting = mWebView.getSettings();
mWebSetting.setJavaScriptEnabled(true);
//js呼叫Android中的方法
mWebView.addJavascriptInterface(this, "XXX");//XXX未html中的方法
/**
* 客戶端提供send_comment方法被js呼叫
* by:chenhe at:2015/09/28
*
* @param uuid uuid
* @param fun_name 呼叫的方法名
* @param json js給客戶端的json
*/
@JavascriptInterface
public void send_comment(final String uuid, final String fun_name, final String json) {
new Thread(new Runnable() {
@Override
public void run() {
commend = CommandFactory.getInstance().createCommand(fun_name);
if (commend != null) {
commend.setFun_name(fun_name);
commend.setmHandler(mHandler);
commend.setParam(json);
commend.setUuid(uuid);
commend.setWebView(mWebView);
commend.do_result(context);
}
}
}).start();
}
這裡通過mWebView.addJavascriptInterface()實現呼叫JS中的方法,也就是說第二個引數為網頁中的方法叫XXX();它裡面的引數則為我下面send_command();方法中的引數然後我再做一些操作。最後通過loadurl();就實現呼叫了。很簡答相信大家也都會用,也都用過,那麼下面給大家詳細介紹一下怎樣通過這樣的呼叫來實現JS呼叫Android端的一些控制元件。
步驟
首先JS呼叫客服端的某個方法,將需要的引數傳遞過來
然後客戶端根據JS的需求去執行相關操作
執行完操作之後回掉JS方法
具體實現
第一步就是上面所描述的過程
這裡省略了(其中fun_name就是JS要調的方法名字舉個例子:比如它想要客戶端實現彈出Dialog,那麼web端定義一個方法名為:popup.alert)
客服端通過方法名字來執行相關操作
通過方法名我們本地去彈出Dialog,或者根據伺服器返回的json資料來執行一些其他複雜的操作,我這裡就不具體說明了,可以有很多,比如開啟通訊錄選擇聯絡人、獲取手機唯一識別符號、設定導航欄、、彈出日期選擇框等等。
執行完相關操作再回撥JS的方法將資訊返回給JS
比如上面的開啟通訊錄選擇聯絡人之後我們可以將聯絡人的手機號姓名等屬性通過Json返回給JS。
大體思路就是這樣,看一下程式碼:
“`
@JavascriptInterface
public void send_comment(final String fun_name, final String json) {
//根據fun_name處理不同業務
new Thread(new Runnable() {
@Override
public void run() {
//注意此處必須是非同步處理
JSONObject jsonObject = null;
try {
jsonObject = new JSONObject(json);
} catch (JSONException e) {
e.printStackTrace();
}
String title = jsonObject.optString("title");
String message = jsonObject.optString("message");
//TODO:根據message執行相關操作
Message msg = new Message();
msg.what = 0;
msg.obj = jsonObject;
handler.senMessage(msg);
}
}).start();
}
/**
* 回掉JS方法將處理資訊返回給JS
* @param isSuccess
* @param json
*/
public void returnToJs(final boolean isSuccess, final JSONObject json){
Log.d("----", "javascript:app_result(`" + isSuccess + "`,`" + json.toString() + "`)");
String data = "javascript:app_result(`" + isSuccess + "`,`" + json.toString() + "`)";
webView.loadUrl(data);
}
private Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if (msg.what==0){
//TODO:執行相關操作
returnToJs(true, (JSONObject) msg.obj);
}
}
};
這樣就實現了基本的JS調Android原生控制元件了,主要是和JS配合好就能完美實現了,現在好多的APP都用的這種方式來實現。所以說弄清楚這一塊很有必要,其實也沒什麼,說是JS呼叫Android,其實就是Android這邊提供一個java介面來loadurl()就可以。
因為小編是第一次用MD來編寫的部落格,所以說樣式上可能不太好看,請大家見諒。如果說這邊文章看的不太懂的話可以私聊小編,小編會給大家詳細講解的。
原始碼已經同步到我的GitHub上了
https://github.com/Hankkin/AndroidJSDemo/tree/master
相關文章
- C和Go相互呼叫Go
- Java和groovy相互呼叫Java
- OC 與 Swift 相互呼叫Swift
- js和vue方法的相互呼叫(iframe父子頁面的方法相互呼叫)。JSVue
- Python與Javascript相互呼叫超詳細講解(四)使用PyNode進行Python與Node.js相互呼叫項(cai)目(keng)實(jing)踐(yan)PythonJavaScriptNode.jsAI
- webview js和java相互呼叫WebViewJSJava
- 前端框架iframe相互呼叫方法前端框架
- Action呼叫字首詳解
- 微服務之間的相互呼叫微服務
- c與c++的相互呼叫C++
- Android呼叫WebService詳解AndroidWeb
- Android-Java 和 JavaScript 相互呼叫AndroidJavaScript
- Webservice呼叫方式:axis,soap詳解Web
- python和c++的相互呼叫教程PythonC++
- c# winform as3相互呼叫C#ORMS3
- [轉]C# winform與Javascript的相互呼叫C#ORMJavaScript
- 詳解SSH 框架中物件呼叫流程框架物件
- 詳細講解函式呼叫原理函式
- Java RMI遠端方法呼叫詳解Java
- Android平臺呼叫WebService詳解AndroidWeb
- 詳解 Qt 呼叫 DLL功能函式QT函式
- C#呼叫Windows API詳解(上)C#WindowsAPI
- Blob實現與File DataURL canvas相互轉換示例詳解Canvas
- go語言與c語言的相互呼叫GoC語言
- Spring @Retryable重試方法呼叫詳解Spring
- 詳解 JS 中 new 呼叫函式原理JS函式
- 〈詳解〉Python3呼叫C程式PythonC程式
- C#呼叫Delphi的dll之詳解C#
- RPC(遠端過程呼叫)詳解RPC
- Vue--子元件之間相互呼叫及傳值Vue元件
- oc與swift檔案的相互呼叫方式——橋接Swift橋接
- C#程式碼與javaScript函式的相互呼叫C#JavaScript函式
- 淘寶API介面AG文件接入呼叫方法詳解API
- inux系統呼叫fcnt()l函式詳解UX函式
- springboot整合eureka,服務相互呼叫簡單示例Spring Boot
- Android JNI開發系列之Java與C相互呼叫AndroidJava
- Hanlp漢字轉拼音使用python呼叫詳解HanLPPython
- Java呼叫SQL Server的儲存過程詳解JavaSQLServer儲存過程