Android WebView使用input[file]浏览本地图片以及拍照上传
本文由 小茗同学 发表于 2016-06-23 浏览(14988)
最后修改 2016-11-16 标签:android webview input file

前言

之前在外部浏览器(如UC、Chrome等)测试过,input[type="file"]就可以轻松实现文件选择和拍照,但是后来放到webview下面来就一大堆问题了。

虽然webview默认不支持input[file],但是可以通过添加一些代码来实现,下面这段代码网上非常常见:

//TODO

可以发现,几乎所有版本都没问题,唯独安卓4.4.1和4.4.2有问题,貌似是Android自己的bug,暂时没找到非常好的方法替代。

Android 5.0+ 重写 onShowFileChooser 生效;
Android 4.4- 重写 openFileChooser 生效。
Android 4.4 重写 openFileChooser 没有生效;

其次

如果不是用input[file]标签、自己去写方法来实现文件浏览和拍照,这还是比较容易的,它和前者的区别是,只能返回图片路径或者图片的base64数据,不能返回浏览器原始的file对象,这就没法实现网页版的上传(虽然base64可以上传,但是对于大文件来说,base64是很消耗性能的),只能用原生来实现上传,另外,关于图片的本地预览,必须网页也放在本地才可以,也就是说http:// 开头的网页无法直接加载本地图片,只有 file:/// 开头的网页才可以加载,而且加载本地图片时的格式也是类似这样的:

<img src="file:///storage/emulated/0/www/test.jpg"/>

否则会提示not allowed to load local resource.

前端

<input type="file" accept="image/*" capture="camera">
<input type="file" accept="video/*" capture="camcorder">
<input type="file" accept="audio/*" capture="microphone">

capture表示,可以捕获到系统默认的设备,比如:camera—照相机;camcorder—摄像机;microphone—录音。

以上只是标准写法,具体否调用成功还得看浏览器具体实现,如果是webapp的话,那就看你的webview是否实现了。

后记

网上有几篇写的不错的文章: