欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android實現(xiàn)H5與Native交互的兩種方式

 更新時間:2016年12月21日 15:13:44   作者:JackMeGo  
Android實現(xiàn)H5頁面和Native頁面交互的方法有兩種,一種是Url攔截的方法,另一種是JavaScript注入,下面來通過這篇文章分別講解。有需要的朋友們可以參考借鑒,下面來一起看看吧。

前言

大家都知道在Android WebView使用中,經(jīng)常需要H5頁面和Native頁面進行交互,比如在網(wǎng)頁上點擊分享按鈕,調(diào)用本地分享接口進行分享,分享成功后本地調(diào)用網(wǎng)頁的JavaScript代碼展示一條分享成功的消息。下面來看看一起看看兩種實現(xiàn)方式是什么?

一、Url攔截的方式

重寫ShouldOverrideUrl進行Url攔截,這種方式通過H5和Native協(xié)商好的Url格式來表明H5頁面想要Native進行的操作,比如撥打電話,播放視頻,查看某個用戶的信息等操作,每種操作對應(yīng)一種url格式,比如:

“/media/image/123”代表H5要調(diào)用Native查看id為123的圖片;
“/webapp/close/webview”表示H5需要Native關(guān)閉當(dāng)前頁面;
“/webapp/patient_card/?patient_id=345”表示H5要調(diào)用Native顯示用戶345的詳情頁

可以通過url的parameter傳遞參數(shù),并通過Uri.parse進行解析。返回true表示截斷對該Url請求的響應(yīng)。

protected WebViewClient mWebClient = new WebViewClient() {
 @Override 
 public boolean shouldOverrideUrlLoading(WebView view, String url) {  
  // 添加tel鏈接響應(yīng)
  if (url.startsWith("tel:")) { 
   Intent intent = new Intent(Intent.ACTION_DIAL, Uri.parse(url)); 
   startActivity(intent); 
   return true;
  }

  // 添加mp4播放相應(yīng)
  if (url.endsWith(".mp4")) { 
   viewVideo(url); 
   return true;
  }

  // 添加圖片鏈接響應(yīng)
  if (Pattern.compile("/media/image").matcher(url).find()) { 
   viewImage(url); 
   return true;
  }
  // 關(guān)閉webview
  if (Pattern.compile("/webapp/close/webview").matcher(url).find()) {   
   onBackPressed(); 
   return true;
  }

  // 添加某個特殊url的響應(yīng)
  if(Pattern.compile("/webapp/patient_card/").matcher(url).find()) { 
   Uri uri = Uri.parse(url); 
   String patientId = uri.getQueryParameter("patient_id");
   viewPatientInfo(patientId);

   return true;
  }

  return super.shouldOverrideUrlLoading(view, url);   
};

二、JavaScript注入方式

相比于Url攔截的方式,JavaScript注入的方式更加直接,Native將開放給H5調(diào)用的函數(shù)注入JavaScript,H5通過JavaScript調(diào)用Native函數(shù)完成操作。

1、獲取webView的WebViewSettings設(shè)置,調(diào)用setJavaScriptEnabled開啟JavaScript調(diào)用。

WebSettings settings = mWebView.getSettings();
settings.setJavaScriptEnabled(true);

2、將需要暴露給JavaScript的函數(shù)前面添加@JavascriptInterface注解,只有添加了該注解的函數(shù)才能被JavaScript調(diào)用。

public class WebAppInterface {
 @JavascriptInterface
 public boolean method1(String param1, String param2) {
   // do something
 }

 @JavascriptInterface
 public boolean method2(String param1, String param2) {
   // do something
 }
}

3、通過WebView的addJavascriptInterface方法,將Native方法所在的class注入到JavaScript中。該函數(shù)的第一個參數(shù)是注入的Native對象,第二個參數(shù)是該對象的名字,JavaScript通過改名字訪問該對象

WebView webView = (WebView) findViewById(R.id.webview);
webView.addJavascriptInterface(new WebAppInterface(), "InterfaceName");

4、這樣,H5頁面就可以通過下面的JavaScript調(diào)用Native的函數(shù)了

<script type="text/javascript"> 
 function method1(param1, param2) {  
  InterfaceName.method1(param1, param2); 
 }
</script>

Native調(diào)用JavaScript

Native調(diào)用JavaScript函數(shù)的方法比較簡單,通過loadUrl函數(shù)進行:

// 無參數(shù)調(diào)用
contentWebView.loadUrl("javascript:javacalljs()");

// 有參數(shù)調(diào)用
mWebView.loadUrl("javascript:test('" + param+ "')"); // param是js的函數(shù)test()的參數(shù)

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對各位Android開發(fā)者們能帶來一定的幫助,如果有疑問大家可以留言交流。

相關(guān)文章

  • Android Toolbar自定義標(biāo)題標(biāo)題居中的實例代碼

    Android Toolbar自定義標(biāo)題標(biāo)題居中的實例代碼

    這篇文章主要介紹了Android Toolbar自定義標(biāo)題 標(biāo)題居中的實例代碼,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-08-08
  • Flutter StatefulBuilder實現(xiàn)局部刷新實例詳解

    Flutter StatefulBuilder實現(xiàn)局部刷新實例詳解

    這篇文章主要為大家介紹了Flutter StatefulBuilder實現(xiàn)局部刷新實例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-08-08
  • 基于TransactionTooLargeException異常分析

    基于TransactionTooLargeException異常分析

    下面小編就為大家分享一篇基于TransactionTooLargeException異常分析,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2017-11-11
  • 取消Android Studio項目與SVN關(guān)聯(lián)的方法

    取消Android Studio項目與SVN關(guān)聯(lián)的方法

    今天小編就為大家分享一篇關(guān)于取消Android Studio項目與SVN關(guān)聯(lián)的方法,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • Android 對手機網(wǎng)絡(luò)的檢測和監(jiān)聽的方法示例

    Android 對手機網(wǎng)絡(luò)的檢測和監(jiān)聽的方法示例

    本篇文章主要介紹了Android 對手機網(wǎng)絡(luò)的檢測和監(jiān)聽的方法示例,主要使用BroadcastReceiver廣播接收器來接收網(wǎng)絡(luò)狀態(tài),現(xiàn)在分享給大家,也給大家做個參考,有興趣的一起來了解一下
    2018-03-03
  • Android布局之TableLayout表格布局

    Android布局之TableLayout表格布局

    Tablelayout類以行和列的形式對控件進行管理,每一行為一個TableRow對象,或一個View控件。當(dāng)為TableRow對象時,可在TableRow下添加子控件,默認(rèn)情況下,每個子控件占據(jù)一列。 當(dāng)為View時,該View將獨占一行
    2015-12-12
  • android 使用okhttp可能引發(fā)OOM的一個點

    android 使用okhttp可能引發(fā)OOM的一個點

    這篇文章主要介紹了android 使用okhttp可能引發(fā)OOM的一個點,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • Android如何設(shè)置圓角圖片

    Android如何設(shè)置圓角圖片

    這篇文章主要為大家詳細(xì)介紹了Android如何設(shè)置圓角圖片,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-02-02
  • Android Kotlin開發(fā)實例(Hello World!)及語法詳解

    Android Kotlin開發(fā)實例(Hello World!)及語法詳解

    這篇文章主要介紹了Android Kotlin開發(fā)實例及語法詳解的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • Android遞歸方式刪除某文件夾下的所有文件(.mp3文件等等)

    Android遞歸方式刪除某文件夾下的所有文件(.mp3文件等等)

    以刪除為例,當(dāng)然,對于遍歷某文件夾下的所有文件均可用這個方法。如搜索.mp3文件等,具體實現(xiàn)如下,感興趣的朋友可以參考下哈
    2013-06-06

最新評論