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企业社保缴费网上缴费流程?

