91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Android中WebView實現點擊超鏈接啟動QQ的方法

發布時間:2020-09-27 12:21:11 來源:腳本之家 閱讀:158 作者:愛開發 欄目:移動開發

前言

之前有次在面試的時候,面試官問了一個如何在WebView點擊超鏈接啟動類型QQ類似第三方應用,我當時的回答是用WebView與js交互可以做到。面試官聽了沒再說什么,應該是答案不是他期望的。今天發現原來可以這樣實現,記錄一下。

實現思路

在Web開發中,啟動QQ來臨時會話,可以通過一個URL鏈接

<a target="_blank"  rel="external nofollow" >啟動QQ</a>

把20178888換成你的QQ號即可。在Android手機有些瀏覽器里這樣也可以正常被調用。

但如果我們要使用Webview展示Web頁面,頁面里包含了上面的鏈接,卻無法正常的啟動QQ。

我們可以在WebView里重載 setWebViewClient方法

 mWebView.setWebViewClient(new WebViewClient() {
  public boolean shouldOverrideUrlLoading(WebView view, String url) {
    view.loadUrl(url);
    return true;
   }
  });

這樣Webview里面的超鏈接要是被觸發了,Webview會去加載替代默認瀏覽器加載。

http://wpa.qq.com/msgrd?v=3&uin=748895431&site=qq&menu=yes

這個鏈接我們看起來這是一個很正常的http請求,通過抓包發現調用的QQ不僅僅是進行一次http的請求,實際還發送了這么一個請求:mqqwpa://im/chat開頭的。

mqqwpa:// 這部分URL的部分,叫做URL的sechme部分。

這里就比較好理解為什么會跳到騰訊應用寶官網,http://wpa.qq.com/是騰訊應用寶的官網,這是第一次請求,
由于它接著再次請求的協議不是http而是mqqwpa://im/chat。

而實際上真正調用QQ的是mqqwpa://im/chat,這時我們應該使用一個Intent來操作調用原生的QQ。

我們需要捕獲這些url,當遇到普通網頁交給Webview處理,走正常流程;當遇到以mqqwpa開頭的,交給默認瀏覽器處理。
這樣WebView點擊超鏈啟動QQ問題就解決了。

下面我們來看實現方式:

其實我們重載 shouldInterceptRequest 方法,來截獲其他的sechme處理即可。

webView.setWebViewClient(new WebViewClient() {
   public boolean shouldOverrideUrlLoading(WebView view, String url) {
    view.loadUrl(url);
    return true;
   }

   @Override
   public WebResourceResponse shouldInterceptRequest(WebView view, String url) {
    if (url.startsWith("http") || url.startsWith("https")) { //http和https協議開頭的執行正常的流程
     return super.shouldInterceptRequest(view, url);
    } else { //其他的URL則會開啟一個Acitity然后去調用原生APP
     Intent in = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
     startActivity(in);
     return null;
    }
   }
  });

完整代碼:

  mWebView = (ProgressWebView) findViewById(R.id.baseweb_webview);
  mWebView.getSettings().setJavaScriptEnabled(true);
  String url ="http://wpa.qq.com/msgrd?v=3&uin=748895431&site=qq&menu=yes";
  mWebView.loadUrl(url);
  mWebView.setWebViewClient(new WebViewClient() {
   public boolean shouldOverrideUrlLoading(WebView view, String url) {
    view.loadUrl(url);
    return true;
   }

   @Override
   public WebResourceResponse shouldInterceptRequest(WebView view, String url) {
    if (url.startsWith("http") || url.startsWith("https")) { //http和https協議開頭的執行正常的流程
     return super.shouldInterceptRequest(view, url);
    } else { //其他的URL則會開啟一個Acitity然后去調用原生APP
     Intent in = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
     startActivity(in);
     return null;
    }
   }
  });

運行效果

Android中WebView實現點擊超鏈接啟動QQ的方法

總結

以上就是這篇文章的全部內容了,希望本文的內容對各位Android開發者們能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

龙泉市| 陇西县| 台湾省| 井冈山市| 佛坪县| 崇文区| 达尔| 阳东县| 东源县| 房产| 乌海市| 无棣县| 措勤县| 玉溪市| 读书| 天峻县| 左云县| 赤水市| 高雄市| 神木县| 昂仁县| 华容县| 湟源县| 通江县| 荥阳市| 长春市| 报价| 中山市| 资阳市| 宾川县| 新密市| 唐山市| 剑阁县| 青浦区| 勐海县| 永定县| 彩票| 漠河县| 察隅县| 高雄县| 桦甸市|