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

首頁 > 系統(tǒng) > Android > 正文

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

2019-10-23 18:30:29
字體:
來源:轉載
供稿:網友

前言

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

實現思路

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

<a target="_blank" href="http://wpa.qq.com/msgrd?v=3&uin=748895431&site=qq&menu=yes" 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里面的超鏈接要是被觸發(fā)了,Webview會去加載替代默認瀏覽器加載。

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

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

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

這里就比較好理解為什么會跳到騰訊應用寶官網,http://wpa.qq.com/是騰訊應用寶的官網,這是第一次請求,
由于它接著再次請求的協(xié)議不是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協(xié)議開頭的執(zhí)行正常的流程     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協(xié)議開頭的執(zhí)行正常的流程     return super.shouldInterceptRequest(view, url);    } else { //其他的URL則會開啟一個Acitity然后去調用原生APP     Intent in = new Intent(Intent.ACTION_VIEW, Uri.parse(url));     startActivity(in);     return null;    }   }  });

運行效果

webview,點擊超鏈接,android,點擊,打開qq

總結

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


注:相關教程知識閱讀請移步到Android開發(fā)頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 扶风县| 高州市| 竹山县| 庆阳市| 吐鲁番市| 大足县| 仁化县| 宁城县| 西昌市| 湟中县| 吉安县| 资阳市| 聂拉木县| 太和县| 漠河县| 绍兴县| 宁都县| 全椒县| 临安市| 正定县| 大港区| 象州县| 富锦市| 七台河市| 博白县| 张家口市| 皋兰县| 明溪县| 通山县| 宕昌县| 谷城县| 德清县| 秦皇岛市| 北川| 澳门| 喀喇沁旗| 二连浩特市| 新密市| 若羌县| 无极县| 磴口县|