当前位置: 58彩票app下载 > 编程技术 > 正文

浅谈Android中WebView点击超链接启动QQ

时间:2019-09-18 11:13来源:编程技术
有次面试时,面试官问了一个如何在WebView点击超链接启动类型QQ类似第三方应用,我当时的回答是用WebView与js交互可以做到。面试官听了没再说什么,应该是答案不是他期望的。今天发

有次面试时,面试官问了一个如何在WebView点击超链接启动类型QQ类似第三方应用,我当时的回答是用WebView与js交互可以做到。面试官听了没再说什么,应该是答案不是他期望的。今天发现原来可以这样实现,记录一下。

在Web开发中,启动QQ来临时会话,可以通过一个URL链接

<a target="_blank" href="http://wpa.qq.com/msgrd?v=3&uin=748895431&site=qq&menu=yes">启动QQ</a>

把20178888换成你的QQ号即可。在Android手机有些浏览器里这样也可以正常被调用。但如果我们要使用Webview展示Web页面,页面里包含了上面的链接,却无法正常的启动QQ。

我们可以在WebView里重载 setWebViewClient方法

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

这样Webview里面的超链接要是被触发了,Webview会去加载替代默认浏览器加载。

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

这个链接我们看起来这是一个很正常的http请求,通过抓包发现调用的QQ不仅仅是进行一次http的请求,实际还发送了这么一个请求:mqqwpa://im/chat开头的。mqqwpa:// 这部分URL的部分,叫做URL的sechme部分。

这里就比较好理解为什么会跳到腾讯应用宝官网,http://wpa.qq.com/是腾讯应用宝的官网,这是第一次请求,由于它接着再次请求的协议不是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; return true; } @Override public WebResourceResponse shouldInterceptRequest(WebView view, String url) { if (url.startsWith || url.startsWith { //http和https协议开头的执行正常的流程 return super.shouldInterceptRequest(view, url); } else { //其他的URL则会开启一个Acitity然后去调用原生APP Intent in = new Intent(Intent.ACTION_VIEW, Uri.parse; startActivity; return null; } } });

完整代码:

 mWebView = (ProgressWebView) findViewById(R.id.baseweb_webview); mWebView.getSettings().setJavaScriptEnabled; String url ="http://wpa.qq.com/msgrd?v=3&uin=748895431&site=qq&menu=yes"; mWebView.loadUrl; mWebView.setWebViewClient(new WebViewClient() { public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl; return true; } @Override public WebResourceResponse shouldInterceptRequest(WebView view, String url) { if (url.startsWith || url.startsWith { //http和https协议开头的执行正常的流程 return super.shouldInterceptRequest(view, url); } else { //其他的URL则会开启一个Acitity然后去调用原生APP Intent in = new Intent(Intent.ACTION_VIEW, Uri.parse; startActivity; return null; } } });

图片 1运行效果

[END]

编辑:编程技术 本文来源:浅谈Android中WebView点击超链接启动QQ

关键词:

  • 上一篇:没有了
  • 下一篇:没有了