热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

WebView填坑——小功能篇

这两天负责修改了几个关于在webview中打开公司移动站的bug。本身不是很难解,网上查查都有,但是也有必要记录下来作为备忘。Webview中上传文件这里的效果类似在pc端上传文件效果,

这两天负责修改了几个关于在webview中打开公司移动站的bug。本身不是很难解,网上查查都有,但是也有必要记录下来作为备忘。

Webview中上传文件

这里的效果类似在pc端上传文件效果,点击打开一个文件选择器,上传文件图片之类的。
openFileChooser()方法的重载是因为在不同系统中调用的方法参数不一样,具体看注释。
ValueCallback mUploadMessage作为成员变量的目的是我们要在打开的系统文件选择器finish()后在onActivityResult()时调用。
具体实现代码如下:


private void initWebView(){
webView.setWebChromeClient(new MyWebChromeClient());
}

private ValueCallback mUploadMessage;
private class MyWebChromeClient extends WebChromeClient {

// js上传文件的事件捕获
// Android > 4.1.1 调用这个方法
public void openFileChooser(ValueCallback uploadMsg, String acceptType, String capture) {
mUploadMessage = uploadMsg;

Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType(TextUtils.isEmpty(acceptType) ? "image/*" : acceptType);

MobileSiteActivity.this.startActivityForResult(
Intent.createChooser(intent, ToolBox.getString(R.string.web_activity_please_chooser)),
MobileSiteActivity.FILECHOOSER_RESULTCODE);

}

// 3.0 + 调用这个方法
public void openFileChooser(ValueCallback uploadMsg, String acceptType) {
openFileChooser(uploadMsg, acceptType, null);
}

// Android <3.0 调用这个方法
public void openFileChooser(ValueCallback uploadMsg) {
openFileChooser(uploadMsg, null);
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (FILECHOOSER_RESULTCODE == requestCode) {
if (null == mUploadMessage) return;
Uri result = data == null || resultCode != RESULT_OK ? null : data.getData();
mUploadMessage.onReceiveValue(result);
mUploadMessage = null;
return;
}
}

WebView当中网页中的地图为白色,不显示地图

这个问题其实就是你没有打开Javascript支持。打开就好啦~

webView.setJavascriptEnabled(true);// 设置支持Javascript脚本

WebView中跳转系统拨号键盘

举一反三,既然要打开系统拨号键盘,那邮箱,地图也可以支持。

webView.setWebViewClient(new WebViewClient() {
public boolean shouldOverrideUrlLoading(WebView view, String url) {

if (url.startsWith("mailto:") || url.startsWith("geo:") || url.startsWith("tel:")) {
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity(intent);
return true;
}
view.loadUrl(url);
return true;
}
});

WebView中支持下载

这里要给WebView设置一个下载监听,监听会回调给你下载地址,这里可以打开系统浏览器去激活下载,用DownloadManger直接去下载也可以,我选择的是第一种方式,这种方式我认为比较符合用户习惯哈。

 webView.setDownloadListener(new MyWebViewDownLoadListener());

private class MyWebViewDownLoadListener implements DownloadListener {

@Override
public void onDownloadStart(String url, String userAgent, String contentDisposition,
String mimetype, long contentLength) {

if (null != url) {
Uri uri = Uri.parse(url);
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);
}
}

}

推荐阅读
  • 开发日志:高效图片压缩与上传技术解析 ... [详细]
  • 在Android平台上,视频监控系统的优化与应用具有重要意义。尽管已有相关示例(如http:www.open-open.comlibviewopen1346400423609.html)展示了基本的监控功能实现,但若要提升系统的稳定性和性能,仍需进行深入研究和优化。本文探讨了如何通过改进算法、优化网络传输和增强用户界面来提高Android视频监控系统的整体效能,以满足更复杂的应用需求。 ... [详细]
  • Spring Boot 中配置全局文件上传路径并实现文件上传功能
    本文介绍如何在 Spring Boot 项目中配置全局文件上传路径,并通过读取配置项实现文件上传功能。通过这种方式,可以更好地管理和维护文件路径。 ... [详细]
  • 解决Only fullscreen opaque activities can request orientation错误的方法
    本文介绍了在使用PictureSelectorLight第三方框架时遇到的Only fullscreen opaque activities can request orientation错误,并提供了一种有效的解决方案。 ... [详细]
  • 本文介绍如何在 Android 中自定义加载对话框 CustomProgressDialog,包括自定义 View 类和 XML 布局文件的详细步骤。 ... [详细]
  • 在分析Android的Audio系统时,我们对mpAudioPolicy->get_input进行了详细探讨,发现其背后涉及的机制相当复杂。本文将详细介绍这一过程及其背后的实现细节。 ... [详细]
  • Android开发技巧:使用IconFont减少应用体积
    本文介绍如何在Android应用中使用IconFont来显示图标,从而有效减少应用的体积。 ... [详细]
  • 本文介绍了如何使用 Node.js 和 Express(4.x 及以上版本)构建高效的文件上传功能。通过引入 `multer` 中间件,可以轻松实现文件上传。首先,需要通过 `npm install multer` 安装该中间件。接着,在 Express 应用中配置 `multer`,以处理多部分表单数据。本文详细讲解了 `multer` 的基本用法和高级配置,帮助开发者快速搭建稳定可靠的文件上传服务。 ... [详细]
  • 在《Cocos2d-x学习笔记:基础概念解析与内存管理机制深入探讨》中,详细介绍了Cocos2d-x的基础概念,并深入分析了其内存管理机制。特别是针对Boost库引入的智能指针管理方法进行了详细的讲解,例如在处理鱼的运动过程中,可以通过编写自定义函数来动态计算角度变化,利用CallFunc回调机制实现高效的游戏逻辑控制。此外,文章还探讨了如何通过智能指针优化资源管理和避免内存泄漏,为开发者提供了实用的编程技巧和最佳实践。 ... [详细]
  • DVWA学习笔记系列:深入理解CSRF攻击机制
    DVWA学习笔记系列:深入理解CSRF攻击机制 ... [详细]
  • 本文详细解析了 Python 2.x 版本中 `urllib` 模块的核心功能与应用实例,重点介绍了 `urlopen()` 和 `urlretrieve()` 方法的使用技巧。其中,`urlopen()` 方法用于发送网络请求并获取响应内容,而 `urlretrieve()` 方法则用于下载文件并保存到本地。文章通过具体示例展示了这两个方法在实际开发中的应用场景,帮助读者更好地理解和掌握 `urllib` 模块的使用。 ... [详细]
  • 2018年9月21日,Destoon官方发布了安全更新,修复了一个由用户“索马里的海贼”报告的前端GETShell漏洞。该漏洞存在于20180827版本的某CMS中,攻击者可以通过构造特定的HTTP请求,利用该漏洞在服务器上执行任意代码,从而获得对系统的控制权。此次更新建议所有用户尽快升级至最新版本,以确保系统的安全性。 ... [详细]
  • 在 Vue 项目中,为了提高页面加载速度和优化用户体验,实现图片上传前的压缩处理至关重要。本文介绍了如何通过集成第三方库和自定义组件,有效减小图片文件大小,确保在不影响图像质量的前提下,提升应用性能。 ... [详细]
  • 利用PHP SDK高效接入新浪微博热搜榜单功能 ... [详细]
  • 本文详细解析了JSONP(JSON with Padding)的跨域机制及其工作原理。JSONP是一种通过动态创建``标签来实现跨域请求的技术,其核心在于利用了浏览器对``标签的宽松同源策略。文章不仅介绍了JSONP的产生背景,还深入探讨了其具体实现过程,包括如何构造请求、服务器端如何响应以及客户端如何处理返回的数据。此外,还分析了JSONP的优势和局限性,帮助读者全面理解这一技术在现代Web开发中的应用。 ... [详细]
author-avatar
手机用户2502901613
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有