国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

詳解Android JS相互調用

2020-04-11 10:54:02
字體:
來源:轉載
供稿:網友

最近在研究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()就可以。

以上就是為大家分享的Android JS相互調用的具體方法,希望對大家的學習有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 巍山| 黄大仙区| 清河县| 婺源县| 常州市| 历史| 中卫市| 兰考县| 克什克腾旗| 福安市| 宁武县| 博罗县| 江源县| 新乡县| 女性| 清徐县| 奈曼旗| 陵水| 鸡泽县| 南汇区| 融水| 白玉县| 汕头市| 永登县| 渝中区| 长阳| 容城县| 昂仁县| 穆棱市| 苏尼特右旗| 梨树县| 和政县| 闵行区| 玉树县| 太康县| 万山特区| 淳化县| 钟山县| 肇州县| 平凉市| 乡城县|