概述
在Web開發(fā)中赊锚,我們可以通過一個URL鏈接成箫,點擊后啟動QQ,這是很好的用戶跳轉體驗腹殿,很方便独悴。
使用的鏈接如下:
<a target="_blank" >click</a>
其中把8888888 換成你的QQ號。
在android 平臺的一些 瀏覽器(比如 UC) 里也可以正常被調用锣尉。
而我們Android里我們會使用Webview展示一些web頁面刻炒,如果頁面里包含了上面的連接,卻無法啟動qq自沧。該如何做?
思路
在自定義WebView過程中坟奥,我們經(jīng)常在WebView里重載 setWebViewClient方法:
webView1.setWebViewClient(new WebViewClient() {
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
});
這段代碼的意思是,如果Webview里的超鏈被點擊,觸發(fā)了url爱谁,就使用Webview去加載晒喷,而替代默認瀏覽器加載。
我嘗試捕獲發(fā)送的請求包管行,發(fā)現(xiàn):
在http://wpa.qq.com的請求中厨埋,實際還發(fā)送了這么一個請求:mqqwpa://im/chat開頭的邪媳。
mqqwpa:// 這部分URL的部分捐顷,叫做URL的sechme部分。
他和 “http://” ,“https:”//類似雨效,而”http://” ,”https://”是普通網(wǎng)頁迅涮,可以被打開的。
那么徽龟,我們需要捕獲叮姑,查看這些url,當遇到普通網(wǎng)頁交給webview處理据悔,當遇到 mqqwpa開頭的传透,交給默認瀏覽器處理。
這樣來解決“在Webview點擊超鏈調用QQ”的問題
實現(xiàn)代碼
我們需要重載 shouldInterceptRequest 方法极颓,來截獲其他的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;
}
}
});