Convert mime types in fileChooserParams to the right format for Intent.setType

前端 未结 2 647
生来不讨喜
生来不讨喜 2020-12-16 07:13

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         


        
2条回答
  •  有刺的猬
    2020-12-16 08:18

    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.

提交回复
热议问题