Android通过WebView选择文件上传(支持直接调起相机等应用)

本文介绍如何在Android WebView中实现文件上传功能,包括调用系统相机和文件管理器。通过自定义WebChromeClient并重写openFileChooser方法,结合Activity的onActivityResult处理,确保多种类型的Intent生效。在不同品牌手机上测试有效,但在锤子系统上存在已知问题。
摘要由CSDN通过智能技术生成

Android通过WebView选择文件上传(支持直接调起相机等应用)

前言

最近项目中上的一个banner,里面有个需求,需要在网页中调用系统的拍照功能或者选择文件,获取图片在网页显示出来,并上传到客户的服务器。但是在banner上线后,发现我们的app支持的Webview中不支持这个功能,而把链接复制到系统自带的或者一些第三方浏览器中都可以进行拍照/文件管理器选择,所以我知道这肯定是通用的js,而我们app做的支持不够了。接着,我决定找找原因。
一番查找之后,我发现这个功能,简单而言,其实就是在一个html页面中有这样一段类似的代码 <input class="filePrew" type="file" capture="camera" accept="image/*" name="image">,我们要在 webview 中添加对这一类 js 的支持。

实现

通过我大Stack Overflow的反馈,我采用了实现这种功能的目前的一种通用做法:
第一步:自定义webviewWebChromeClient,在其中覆盖掉openFileChooser方法。

注意:这里是WebChromeClient,不是WebViewClient。而且openFileChooser方法在WebChromeClient中有@hide标记,不过只管重写即可。

贴上代码:

/** 选择文件进行上传 */
            // Andorid 4.1+
            public void openFileChooser(ValueCallback<Uri> uploadFile, String acceptType, String capture) {
                openFileChooser(uploadFile, acceptType);
            }

            // Andorid 3.0 +
            public void openFileChooser(ValueCallback<Uri> uploadFile, String acceptType) {
                mUploadFile = uploadFile;
                act.startActivityForResult(createDefaultOpenableI
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值