I am trying to upload a file using a WebView in Android.
This is the code in use:
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
@Override
public boolean o
I improved the solution using this code:
// Validation utility for mime types
private List extractValidMimeTypes(String[] mimeTypes) {
List results = new ArrayList();
List mimes;
if (mimeTypes.length() == 1 && mimeTypes[0].contains(",")) {
mimes = Arrays.asList(mimeTypes[0].split(","));
} else {
mimes = Arrays.asList(mimeTypes);
}
MimeTypeMap mtm = MimeTypeMap.getSingleton();
for (String mime : mimes) {
if (mime != null && mime.trim().startsWith(".")) {
String extensionWithoutDot = mime.trim().substring(1, mime.trim().length());
String derivedMime = mtm.getMimeTypeFromExtension(extensionWithoutDot);
if (derivedMime != null && !results.contains(derivedMime)) {
// adds valid mime type derived from the file extension
results.add(derivedMime);
}
} else if (mtm.getExtensionFromMimeType(mime) != null && !results.contains(mime)) {
// adds valid mime type checked agains file extensions mappings
results.add(mime);
}
}
return results;
}
public boolean onShowFileChooser(WebView webView, final ValueCallback filePathsCallback, final WebChromeClient.FileChooserParams fileChooserParams) {
Intent intent = fileChooserParams.createIntent();
List validMimeTypes = extractValidMimeTypes(fileChooserParams.getAcceptTypes());
if (validMimeTypes.isEmpty()) {
intent.setType(DEFAULT_MIME_TYPE);
} else {
intent.setType(String.join(" ", validMimeTypes));
}
...
See my Pull Request for more details.