一、问题场景:
项目中遇到通过网页上传文件的需求,IOS直接是支持的,安卓端却没反应,有些机型甚至闪退。其实是Android的webview默认是不支持<input type="file"/>文件上传的。现在的前端页面需要处理的是:
1.打开本地文件选择器
2.用户选择需要上传的文件
3.处理用户选择的文件通知webview
4.前端提交表单上传文件
首先需要webview 对 JS 的支持,即 webview.getSettings().setJavaScriptEnable(true);其次要注意前端页面针对不同版本的android系统 webview内核会有不同,调用方法是不一样的。
二、问题解决:
1.需要授予的权限
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
2.针对不同系统的处理
webview.setWebChromeClient(new WebChromeClient() {
// For Android < 3.0
public void openFileChooser(ValueCallback<Uri> valueCallback) {
uploadMessage = valueCallback;
openImageChooserActivity();
}
// For Android >= 3.0
public void openFileChooser(ValueCallback valueCallback, String acceptType) {
uploadMessage = valueCallback;
openImageChooserActivity();
}
//For Android >= 4.1
public void openFileChooser(ValueCallback<Uri> valueCallback, String acceptType, String capture) {
uploadMessage = valueCallback;
openImageChooserActivity();
}
// For Android >= 5.0
@Override
public boolean onShowFileChooser(WebView webView, ValueCallback<Uri[]> filePathCallback, WebChromeClient.FileChooserParams fileChooserParams) {
uploadMessageAboveL = filePathCallback;
openImageChooserActivity();
return true;
}
});
三、完整代码:<