在Android WebView中,使用时,由于WebView默认不支持文件上传功能,需要进行一些额外的设置才能使其正常工作。以下是一种解决方法:
WebView webView = findViewById(R.id.webview);
WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true); // 启用JavaScript
webSettings.setAllowFileAccess(true); // 允许访问文件
webSettings.setAllowContentAccess(true); // 允许访问内容
webView.setWebChromeClient(new WebChromeClient() {
// 文件选择回调
@Override
public boolean onShowFileChooser(WebView webView, ValueCallback filePathCallback, FileChooserParams fileChooserParams) {
// 创建一个Intent,用于选择文件
Intent intent = fileChooserParams.createIntent();
try {
// 启动文件选择器
startActivityForResult(intent, FILE_CHOOSER_REQUEST_CODE);
} catch (ActivityNotFoundException e) {
// 处理异常
return false;
}
return true;
}
});
private static final int FILE_CHOOSER_REQUEST_CODE = 1;
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == FILE_CHOOSER_REQUEST_CODE) {
if (resultCode == RESULT_OK) {
// 获取选择的文件Uri列表
Uri[] selectedFiles = FileChooserParams.parseResult(resultCode, data);
// 将选择的文件Uri返回给WebView
ValueCallback filePathCallback = webView.getWebChromeClient().onShowFileChooser(null, null);
filePathCallback.onReceiveValue(selectedFiles);
} else {
// 取消选择文件操作
ValueCallback filePathCallback = webView.getWebChromeClient().onShowFileChooser(null, null);
filePathCallback.onReceiveValue(null);
}
}
}
通过以上步骤,应该可以使Android WebView中的正常工作,并能够选择文件进行上传。