Android中WebView实现点击超链接启动QQ的方法

发布时间 - 2026-01-11 00:47:19    点击率:

前言

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

实现思路

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

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

把20178888换成你的QQ号即可。在Android手机有些浏览器里这样也可以正常被调用。

但如果我们要使用Webview展示Web页面,页面里包含了上面的链接,却无法正常的启动QQ。

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

 mWebView.setWebViewClient(new WebViewClient() {
  public boolean shouldOverrideUrlLoading(WebView view, String url) {
    view.loadUrl(url);
    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(url);
    return true;
   }

   @Override
   public WebResourceResponse shouldInterceptRequest(WebView view, String url) {
    if (url.startsWith("http") || url.startsWith("https")) { //http和https协议开头的执行正常的流程
     return super.shouldInterceptRequest(view, url);
    } else { //其他的URL则会开启一个Acitity然后去调用原生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协议开头的执行正常的流程
     return super.shouldInterceptRequest(view, url);
    } else { //其他的URL则会开启一个Acitity然后去调用原生APP
     Intent in = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
     startActivity(in);
     return null;
    }
   }
  });

运行效果

总结

以上就是这篇文章的全部内容了,希望本文的内容对各位Android开发者们能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。


# webview  # 点击超链接  # android  # 点击  # 打开qq  # Android webview 内存泄露的解决方法  # Android 解决WebView无法上传文件的问题  # Android实现webview实例代码  # Android WebView 不支持 H5 input type="file" 解决方法  # 详解Android Webview加载网页时发送HTTP头信息  # Android 5.1 WebView内存泄漏问题及快速解决方法  # Android如何让WebView中的HTML5页面实现视频全屏播放  # Android WebView的使用方法总结  # 其他的  # 腾讯  # 则会  # 官网  # 的是  # 超链接  # 面试官  # 这是  # 加载  # 是他  # 说什么  # 听了  # 这是一个  # 我们可以  # 这部  # 可以通过  # 较好  # 仅是  # 问了  # 这篇文章 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Python图片处理进阶教程_Pillow滤镜与图像增强  谷歌浏览器下载文件时中断怎么办 Google Chrome下载管理修复  Laravel Blade组件怎么用_Laravel可复用视图组件的创建与使用  Laravel API资源(Resource)怎么用_格式化Laravel API响应的最佳实践  购物网站制作费用多少,开办网上购物网站,需要办理哪些手续?  Laravel与Inertia.js怎么结合_使用Laravel和Inertia构建现代单页应用  公司门户网站制作公司有哪些,怎样使用wordpress制作一个企业网站?  python中快速进行多个字符替换的方法小结  深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?  Laravel如何使用Blade模板引擎?(完整语法和示例)  Win11怎么关闭透明效果_Windows11辅助功能视觉效果设置  1688铺货到淘宝怎么操作 1688一键铺货到自己店铺详细步骤  Python企业级消息系统教程_KafkaRabbitMQ高并发应用  C#如何调用原生C++ COM对象详解  高端建站三要素:定制模板、企业官网与响应式设计优化  制作公司内部网站有哪些,内网如何建网站?  如何在 Pandas 中基于一列条件计算另一列的分组均值  Laravel怎么上传文件_Laravel图片上传及存储配置  零服务器AI建站解决方案:快速部署与云端平台低成本实践  如何用y主机助手快速搭建网站?  大学网站设计制作软件有哪些,如何将网站制作成自己app?  创业网站制作流程,创业网站可靠吗?  php做exe能调用系统命令吗_执行cmd指令实现方式【详解】  Python自动化办公教程_ExcelWordPDF批量处理案例  Laravel如何生成和使用数据填充?(Seeder和Factory示例)  手机网站制作与建设方案,手机网站如何建设?  Laravel怎么返回JSON格式数据_Laravel API资源Response响应格式化【技巧】  如何在阿里云域名上完成建站全流程?  如何自定义建站之星模板颜色并下载新样式?  如何用腾讯建站主机快速创建免费网站?  Android Socket接口实现即时通讯实例代码  HTML5空格和nbsp有啥关系_nbsp的作用及使用场景【说明】  详解MySQL数据库的安装与密码配置  EditPlus中的正则表达式 实战(4)  佐糖AI抠图怎样调整抠图精度_佐糖AI精度调整与放大细化操作【攻略】  javascript基于原型链的继承及call和apply函数用法分析  js实现点击每个li节点,都弹出其文本值及修改  香港服务器选型指南:免备案配置与高效建站方案解析  网站建设整体流程解析,建站其实很容易!  绝密ChatGPT指令:手把手教你生成HR无法拒绝的求职信  php485函数参数是什么意思_php485各参数详细说明【介绍】  香港服务器网站生成指南:免费资源整合与高速稳定配置方案  PHP 500报错的快速解决方法  Win11怎样安装网易有道词典_Win11安装词典教程【步骤】  Thinkphp 中 distinct 的用法解析  如何在建站之星网店版论坛获取技术支持?  如何用PHP工具快速搭建高效网站?  如何快速生成专业多端适配建站电话?  如何快速搭建高效WAP手机网站吸引移动用户?  大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?