概述
在Web開發(fā)中,我們可以通過(guò)一個(gè)URL鏈接,點(diǎn)擊后啟動(dòng)QQ,這是很好的用戶跳轉(zhuǎn)體驗(yàn),很方便。
使用的鏈接如下:
<a target="_blank" >click</a>
其中把8888888 換成你的QQ號(hào)。
在android 平臺(tái)的一些 瀏覽器(比如 UC) 里也可以正常被調(diào)用。
而我們Android里我們會(huì)使用Webview展示一些web頁(yè)面,如果頁(yè)面里包含了上面的連接,卻無(wú)法啟動(dòng)qq。該如何做?
思路
在自定義WebView過(guò)程中,我們經(jīng)常在WebView里重載 setWebViewClient方法:
webView1.setWebViewClient(new WebViewClient() {
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
});
這段代碼的意思是,如果Webview里的超鏈被點(diǎn)擊,觸發(fā)了url,就使用Webview去加載,而替代默認(rèn)瀏覽器加載。
我嘗試捕獲發(fā)送的請(qǐng)求包,發(fā)現(xiàn):
在http://wpa.qq.com的請(qǐng)求中,實(shí)際還發(fā)送了這么一個(gè)請(qǐng)求:mqqwpa://im/chat開頭的。
mqqwpa:// 這部分URL的部分,叫做URL的sechme部分。
他和 “http://” ,“https:”//類似,而”http://” ,”https://”是普通網(wǎng)頁(yè),可以被打開的。
那么,我們需要捕獲,查看這些url,當(dāng)遇到普通網(wǎng)頁(yè)交給webview處理,當(dāng)遇到 mqqwpa開頭的,交給默認(rèn)瀏覽器處理。
這樣來(lái)解決“在Webview點(diǎn)擊超鏈調(diào)用QQ”的問題
實(shí)現(xiàn)代碼
我們需要重載 shouldInterceptRequest 方法,來(lái)截獲其他的sechme處理。
webView1.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")) {
return super.shouldInterceptRequest(view, url);
} else {
Intent in = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity(in);
return null;
}
}
});