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

Android中WebView實(shí)現(xiàn)點(diǎn)擊超鏈接啟動(dòng)QQ的方法

 更新時(shí)間:2017年04月23日 14:09:00   作者:愛(ài)開(kāi)發(fā)  
這篇文章主要給大家介紹了在Android中WebView如何實(shí)現(xiàn)點(diǎn)擊超鏈接啟動(dòng)QQ的方法,文中給出了詳細(xì)的示例代碼,相信對(duì)大家的學(xué)習(xí)或者工作具有一定的參考價(jià)值,需要的朋友們下面來(lái)一起看看吧。

前言

之前有次在面試的時(shí)候,面試官問(wèn)了一個(gè)如何在WebView點(diǎn)擊超鏈接啟動(dòng)類(lèi)型QQ類(lèi)似第三方應(yīng)用,我當(dāng)時(shí)的回答是用WebView與js交互可以做到。面試官聽(tīng)了沒(méi)再說(shuō)什么,應(yīng)該是答案不是他期望的。今天發(fā)現(xiàn)原來(lái)可以這樣實(shí)現(xiàn),記錄一下。

實(shí)現(xiàn)思路

在Web開(kāi)發(fā)中,啟動(dòng)QQ來(lái)臨時(shí)會(huì)話(huà),可以通過(guò)一個(gè)URL鏈接

<a target="_blank"  rel="external nofollow" >啟動(dòng)QQ</a>

把20178888換成你的QQ號(hào)即可。在Android手機(jī)有些瀏覽器里這樣也可以正常被調(diào)用。

但如果我們要使用Webview展示W(wǎng)eb頁(yè)面,頁(yè)面里包含了上面的鏈接,卻無(wú)法正常的啟動(dòng)QQ。

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

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

這樣Webview里面的超鏈接要是被觸發(fā)了,Webview會(huì)去加載替代默認(rèn)瀏覽器加載。

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

這個(gè)鏈接我們看起來(lái)這是一個(gè)很正常的http請(qǐng)求,通過(guò)抓包發(fā)現(xiàn)調(diào)用的QQ不僅僅是進(jìn)行一次http的請(qǐng)求,實(shí)際還發(fā)送了這么一個(gè)請(qǐng)求:mqqwpa://im/chat開(kāi)頭的。

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

這里就比較好理解為什么會(huì)跳到騰訊應(yīng)用寶官網(wǎng),http://wpa.qq.com/是騰訊應(yīng)用寶的官網(wǎng),這是第一次請(qǐng)求,
由于它接著再次請(qǐng)求的協(xié)議不是http而是mqqwpa://im/chat。

而實(shí)際上真正調(diào)用QQ的是mqqwpa://im/chat,這時(shí)我們應(yīng)該使用一個(gè)Intent來(lái)操作調(diào)用原生的QQ。

我們需要捕獲這些url,當(dāng)遇到普通網(wǎng)頁(yè)交給Webview處理,走正常流程;當(dāng)遇到以mqqwpa開(kāi)頭的,交給默認(rèn)瀏覽器處理。
這樣WebView點(diǎn)擊超鏈啟動(dòng)QQ問(wèn)題就解決了。

下面我們來(lái)看實(shí)現(xiàn)方式:

其實(shí)我們重載 shouldInterceptRequest 方法,來(lái)截獲其他的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é)議開(kāi)頭的執(zhí)行正常的流程
     return super.shouldInterceptRequest(view, url);
    } else { //其他的URL則會(huì)開(kāi)啟一個(gè)Acitity然后去調(diào)用原生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é)議開(kāi)頭的執(zhí)行正常的流程
     return super.shouldInterceptRequest(view, url);
    } else { //其他的URL則會(huì)開(kāi)啟一個(gè)Acitity然后去調(diào)用原生APP
     Intent in = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
     startActivity(in);
     return null;
    }
   }
  });

運(yùn)行效果

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)各位Android開(kāi)發(fā)者們能帶來(lái)一定的幫助,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • Android使用selector修改TextView中字體顏色和背景色的方法

    Android使用selector修改TextView中字體顏色和背景色的方法

    這篇文章主要介紹了Android使用selector修改TextView中字體顏色和背景色的方法,實(shí)例分析了selector方法的相關(guān)使用技巧,需要的朋友可以參考下
    2016-01-01
  • Android中ProgressDialog的dismiss()與cancel()方法的區(qū)別

    Android中ProgressDialog的dismiss()與cancel()方法的區(qū)別

    本文主要介紹了Android中ProgressDialog的dismiss()與cancel()方法的區(qū)別,具有很好的參考價(jià)值。下面跟著小編一起來(lái)看下吧
    2017-04-04
  • 解析Android Jetpack簡(jiǎn)介

    解析Android Jetpack簡(jiǎn)介

    Jetpack是一套庫(kù)、工具和指南的集合,幫助開(kāi)發(fā)者更輕松地編寫(xiě)優(yōu)質(zhì)應(yīng)用,這篇文章主要介紹了Android Jetpack簡(jiǎn)介,需要的朋友可以參考下
    2022-09-09
  • Android編程之截屏實(shí)現(xiàn)方法(包括scrollview與listview)

    Android編程之截屏實(shí)現(xiàn)方法(包括scrollview與listview)

    這篇文章主要介紹了Android編程之截屏實(shí)現(xiàn)方法,包括截取scrollview與listview屏幕的相關(guān)技巧,以及截屏圖片的生成與保存技巧,需要的朋友可以參考下
    2015-11-11
  • Android使用ViewDragHelper實(shí)現(xiàn)QQ聊天氣泡拖動(dòng)效果

    Android使用ViewDragHelper實(shí)現(xiàn)QQ聊天氣泡拖動(dòng)效果

    這篇文章主要為大家詳細(xì)介紹了Android使用ViewDragHelper實(shí)現(xiàn)QQ聊天氣泡拖動(dòng)效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • Android 多渠道打包進(jìn)階版

    Android 多渠道打包進(jìn)階版

    上篇文章更了Android 多渠道打包,這篇文章將做一個(gè)后續(xù)繼續(xù)更Android 多渠道打包進(jìn)階版,上次意未盡的朋友可以繼續(xù)啦,第一次點(diǎn)進(jìn)來(lái)的朋友也可以看上次文章
    2021-09-09
  • Android?WebRTC?對(duì)?AudioRecord?的使用技術(shù)分享

    Android?WebRTC?對(duì)?AudioRecord?的使用技術(shù)分享

    這篇文章主要介紹了Android?WebRTC?對(duì)?AudioRecord?的使用技術(shù)分享,AudioRecord?是?Android?基于原始PCM音頻數(shù)據(jù)錄制的類(lèi),接下來(lái)和小編進(jìn)入文章了解更詳細(xì)的內(nèi)容吧
    2022-02-02
  • Android Handler,Message,MessageQueue,Loper源碼解析詳解

    Android Handler,Message,MessageQueue,Loper源碼解析詳解

    這篇文章主要介紹了Android Handler,Message,MessageQueue,Loper源碼解析詳解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-09-09
  • Android測(cè)試方法總結(jié)

    Android測(cè)試方法總結(jié)

    在這篇文章中我們給大家總結(jié)了Android測(cè)試方法以及需要注意的地方,有興趣的朋友參考學(xué)習(xí)下。
    2018-07-07
  • Android顯示富文本+夜間深色模式

    Android顯示富文本+夜間深色模式

    大家好,本篇文章主要講的是Android顯示富文本+夜間深色模式,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話(huà)記得收藏一下,方便下次瀏覽
    2022-01-01

最新評(píng)論