詳解Android JS相互調(diào)用
最近在研究Android、JS相互調(diào)用,之前沒怎么接觸過,只知道loadUrl()就可以加載一個(gè)網(wǎng)頁了,研究過之后發(fā)現(xiàn)Android可以調(diào)JS,JS也可以調(diào)Android原生控件,很開心啊。下面小編就開始嘍:
原理就是Java和JS調(diào)用,在Android中是通過WebView來實(shí)現(xiàn)的。
下面先說一下簡單的Android和JS相互調(diào)用
- 首先通過loadurl()來加載網(wǎng)頁
- WebView開啟JS腳本執(zhí)行
- Android端提供JS調(diào)用的交互接口
簡單的看一下代碼:
mWebView=(MyWebView)findViewById(R.id.wv_container_information);
mWebSetting = mWebView.getSettings();
mWebSetting.setJavaScriptEnabled(true);
//js調(diào)用Android中的方法
mWebView.addJavascriptInterface(this, "XXX");//XXX未html中的方法
/**
* 客戶端提供send_comment方法被js調(diào)用
* by:chenhe at:2015/09/28
*
* @param uuid uuid
* @param fun_name 調(diào)用的方法名
* @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()實(shí)現(xiàn)調(diào)用JS中的方法,也就是說第二個(gè)參數(shù)為網(wǎng)頁中的方法叫XXX();它里面的參數(shù)則為我下面send_command();方法中的參數(shù)然后我再做一些操作。最后通過loadurl();就實(shí)現(xiàn)調(diào)用了。很簡答相信大家也都會(huì)用,也都用過,那么下面給大家詳細(xì)介紹一下怎樣通過這樣的調(diào)用來實(shí)現(xiàn)JS調(diào)用Android端的一些控件。
步驟
- 首先JS調(diào)用客服端的某個(gè)方法,將需要的參數(shù)傳遞過來
- 然后客戶端根據(jù)JS的需求去執(zhí)行相關(guān)操作
- 執(zhí)行完操作之后回掉JS方法
具體實(shí)現(xiàn)
第一步就是上面所描述的過程
這里省略了(其中fun_name就是JS要調(diào)的方法名字舉個(gè)例子:比如它想要客戶端實(shí)現(xiàn)彈出Dialog,那么web端定義一個(gè)方法名為:popup.alert)
客服端通過方法名字來執(zhí)行相關(guān)操作
通過方法名我們本地去彈出Dialog,或者根據(jù)服務(wù)器返回的json數(shù)據(jù)來執(zhí)行一些其他復(fù)雜的操作,我這里就不具體說明了,可以有很多,比如打開通訊錄選擇聯(lián)系人、獲取手機(jī)唯一標(biāo)識符、設(shè)置導(dǎo)航欄、、彈出日期選擇框等等。
執(zhí)行完相關(guān)操作再回調(diào)JS的方法將信息返回給JS
比如上面的打開通訊錄選擇聯(lián)系人之后我們可以將聯(lián)系人的手機(jī)號姓名等屬性通過Json返回給JS。
大體思路就是這樣,看一下代碼:
@JavascriptInterface
public void send_comment(final String fun_name, final String json) {
//根據(jù)fun_name處理不同業(yè)務(wù)
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:根據(jù)message執(zhí)行相關(guān)操作
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:執(zhí)行相關(guān)操作
returnToJs(true, (JSONObject) msg.obj);
}
}
};
這樣就實(shí)現(xiàn)了基本的JS調(diào)Android原生控件了,主要是和JS配合好就能完美實(shí)現(xiàn)了,現(xiàn)在好多的APP都用的這種方式來實(shí)現(xiàn)。所以說弄清楚這一塊很有必要,其實(shí)也沒什么,說是JS調(diào)用Android,其實(shí)就是Android這邊提供一個(gè)java接口來loadurl()就可以。
以上就是為大家分享的Android JS相互調(diào)用的具體方法,希望對大家的學(xué)習(xí)有所幫助。
相關(guān)文章
Android RichText 讓Textview輕松的支持富文本(圖像ImageSpan、點(diǎn)擊效果等等類似QQ微信聊
AndroidRichText幫助實(shí)現(xiàn)像QQ,微信一樣的,一個(gè)TextView里既有文字又有表情又有圖片的效果,采用插件化的框架,代碼簡單,可拓展性強(qiáng)2016-01-01
Android利用Service開發(fā)簡單的音樂播放功能
這篇文章主要介紹了Android利用Service開發(fā)簡單的音樂播放功能,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧2023-04-04
Android ViewPager撤消左右滑動(dòng)切換功能實(shí)現(xiàn)代碼
這篇文章主要介紹了Android ViewPager撤消左右滑動(dòng)切換功能實(shí)現(xiàn)代碼,需要的朋友可以參考下2017-04-04
Android ButtonOnClick事件的寫法總結(jié)
這篇文章主要介紹了Android ButtonOnClick事件的寫法總結(jié)的相關(guān)資料,這里把Android ButtonOnClick的寫法做個(gè)總結(jié),希望能幫助到大家,需要的朋友可以參考下2017-07-07
XListView實(shí)現(xiàn)網(wǎng)絡(luò)加載圖片和下拉刷新
這篇文章主要為大家詳細(xì)介紹了XListView實(shí)現(xiàn)網(wǎng)絡(luò)加載圖片和下拉刷新,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-11-11
AndroidStudio 實(shí)現(xiàn)加載字體資源的方法
這篇文章主要介紹了AndroidStudio 實(shí)現(xiàn)加載字體資源的方法的相關(guān)資料,這里提供了詳細(xì)的實(shí)現(xiàn)方法,需要的朋友可以參考下2016-11-11
Android實(shí)現(xiàn)帶進(jìn)度條的WebView
這篇文章主要介紹了Android實(shí)現(xiàn)帶進(jìn)度條的WebView,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-11-11

