在PC端,咱們能夠經過一個URL連接,點擊後啓動QQ,這是很好的用戶跳轉體驗。很方便。android
使用的連接以下:web
<a target="_blank" href="http://wpa.qq.com/msgrd?v=3&uin=8888888&site=qq&menu=yes"
>click</a>瀏覽器
其中把8888888 換成你的QQ號。ide
那麼在android裏能夠這麼使用麼? 實際上在 默認瀏覽器 (或者 UC) 裏能夠作到。而使用自定義的webView時,體驗就不那麼好了。ui
咱們常常在WebView裏 進行 下面的重載 setWebViewClient的對象url
webView1.setWebViewClient(new WebViewClient() { public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; } });
若是這樣作了,就沒法跳轉到QQ了。爲何呢?spa
經捕獲發送的請求包,我發現了在http://wpa.qq.com的請求中,實際還發送了這麼一個請求:mqqwpa://im/chat開頭的。code
mqqwpa:// 這部分URL的部分,叫作URL的sechme部分,他是http:// ,https://相似,而http:// ,https://是網頁,能夠打開的。交由webView處理,而其餘的則交由默認處理。這樣就呢過解決咱們的 在URL連接點擊後調用QQ。對象
因此你須要重載 shouldInterceptRequest 方法,來截獲其餘的sechme處理。blog
像下面這樣:
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; } } });