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