问题的根本在于WebView设置了JavaScriptEnabled为false,因此无法触发文件上传。可以按照以下步骤解决:
下面是代码示例:
webView.setWebViewClient(new WebViewClient() {
...
@Override
public boolean onShowFileChooser(WebView webView, ValueCallback filePathCallback, WebChromeClient.FileChooserParams fileChooserParams) {
// 打开系统文件选择器
Intent intent = fileChooserParams.createIntent();
startActivityForResult(intent, REQUEST_SELECT_FILE);
// 返回true表示我们已经处理了文件选择器,不需要WebView自己处理
return true;
}
});
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if(requestCode == REQUEST_SELECT_FILE && resultCode == RESULT_OK) {
Uri result = data == null || resultCode != RESULT_OK ? null : data.getData();
if(result == null) {
filePathCallback.onReceiveValue(null);
return;
}
// 将选择的文件路径作为结果返回给WebView
Uri[] results = new Uri[]{result};
filePathCallback.onReceiveValue(results);
}
}
webView.setWebChromeClient(new WebChromeClient() {
...
@Override
public boolean onShowFileChooser(WebView webView, ValueCallback filePathCallback, FileChooserParams fileChooserParams) {
// 保存文件选择器回调
MainActivity.this.filePathCallback = filePathCallback;
// 返回false表示由WebView自己处理文件选择器
return false;
}
});