要解决安卓WebView中上传按钮无法工作的问题,可以尝试以下方法:
webView.setWebViewClient(new WebViewClient() {
@Override
public boolean onShowFileChooser(WebView webView, ValueCallback filePathCallback, WebChromeClient.FileChooserParams fileChooserParams) {
// 创建一个选择文件的Intent
Intent intent = fileChooserParams.createIntent();
try {
// 启动文件选择器
startActivityForResult(intent, FILE_CHOOSER_RESULT_CODE);
} catch (ActivityNotFoundException e) {
e.printStackTrace();
return false;
}
return true;
}
});
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == FILE_CHOOSER_RESULT_CODE) {
if (uploadMessage != null) {
Uri[] results = null;
if (resultCode == Activity.RESULT_OK) {
if (data != null) {
// 获取选择的文件Uri
results = new Uri[] { data.getData() };
}
}
// 将选择的文件Uri返回给WebView
uploadMessage.onReceiveValue(results);
uploadMessage = null;
}
}
}
webView.setWebChromeClient(new WebChromeClient() {
// For Android 3.0+
public void openFileChooser(ValueCallback uploadMsg) {
mUploadMessage = uploadMsg;
// 创建一个选择文件的Intent
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("*/*");
// 启动文件选择器
startActivityForResult(Intent.createChooser(intent, "File Chooser"), FILE_CHOOSER_RESULT_CODE);
}
// For Android 3.0+
public void openFileChooser(ValueCallback uploadMsg, String acceptType) {
mUploadMessage = uploadMsg;
// 创建一个选择文件的Intent
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType(acceptType);
// 启动文件选择器
startActivityForResult(Intent.createChooser(intent, "File Chooser"), FILE_CHOOSER_RESULT_CODE);
}
// For Android < 3.0
public void openFileChooser(ValueCallback uploadMsg, String acceptType, String capture) {
mUploadMessage = uploadMsg;
// 创建一个选择文件的Intent
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType(acceptType);
// 启动文件选择器
startActivityForResult(Intent.createChooser(intent, "File Chooser"), FILE_CHOOSER_RESULT_CODE);
}
// For Android 5.0+
@Override
public boolean onShowFileChooser(WebView webView, ValueCallback filePathCallback, FileChooserParams fileChooserParams) {
if (mUploadMessageArray != null) {
mUploadMessageArray.onReceiveValue(null);
mUploadMessageArray = null;
}
mUploadMessageArray = filePathCallback;
// 创建一个选择文件的Intent
Intent intent = fileChooserParams.createIntent();
try {
startActivityForResult(intent, FILE_CHOOSER_RESULT_CODE);
} catch (ActivityNotFoundException e) {
e.printStackTrace();
mUploadMessageArray = null;
return false;
}
return true;
}
});
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == FILE_CHOOSER_RESULT_CODE) {
if (mUploadMessage != null) {
// For Android 3.0+
Uri result = data == null || resultCode != RESULT_OK ? null : data.getData();
mUploadMessage.onReceiveValue(result);
mUploadMessage = null;
} else if (mUploadMessageArray != null) {
// For Android 5.0+
Uri[] results = null;
if (resultCode == Activity.RESULT_OK && data != null) {
String dataString = data.getDataString();
ClipData clipData = data.getClipData();
if