File Upload in WebView

后端 未结 19 2189
旧巷少年郎
旧巷少年郎 2020-11-22 00:28

I have been struggling to upload files from WebView since last few days and there is no progress. I googled and implemented all suggested solutions but none works, like: sol

19条回答
  •  遇见更好的自我
    2020-11-22 00:59

    2019: This code worked for me (Tested on Androids 5 - 9).

    package com.example.filechooser;
    
    import android.app.Activity;
    import android.content.Intent;
    import android.net.Uri;
    import android.net.http.SslError;
    import android.os.Bundle;
    import android.webkit.SslErrorHandler;
    import android.webkit.ValueCallback;
    import android.webkit.WebChromeClient;
    import android.webkit.WebView;
    import android.webkit.WebViewClient;
    
    
    public class MainActivity extends Activity {
    
        // variables para manejar la subida de archivos
        private final static int FILECHOOSER_RESULTCODE = 1;
        private ValueCallback mUploadMessage;
    
        // variable para manejar el navegador empotrado
        WebView mainWebView;
    
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
    
            super.onCreate(savedInstanceState);
    
            setContentView(R.layout.activity_main);
    
            // instanciamos el webview
            mainWebView = findViewById(R.id.main_web_view);
    
            // establecemos el cliente interno para que la navegacion no se salga de la aplicacion
            mainWebView.setWebViewClient(new MyWebViewClient());
    
            // establecemos el cliente chrome para seleccionar archivos
            mainWebView.setWebChromeClient(new MyWebChromeClient());
    
            // configuracion del webview
            mainWebView.getSettings().setJavaScriptEnabled(true);
    
            // cargamos la pagina
            mainWebView.loadUrl("https://example.com");
        }
    
    
        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
    
            // manejo de seleccion de archivo
            if (requestCode == FILECHOOSER_RESULTCODE) {
    
                if (null == mUploadMessage || intent == null || resultCode != RESULT_OK) {
                    return;
                }
    
                Uri[] result = null;
                String dataString = intent.getDataString();
    
                if (dataString != null) {
                    result = new Uri[]{ Uri.parse(dataString) };
                }
    
                mUploadMessage.onReceiveValue(result);
                mUploadMessage = null;
            }
        }
    
    
        // ====================
        // Web clients classes
        // ====================
    
        /**
         * Clase para configurar el webview
         */
        private class MyWebViewClient extends WebViewClient {
    
            // permite la navegacion dentro del webview
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                view.loadUrl(url);
                return true;
            }
        }
    
    
        /**
         * Clase para configurar el chrome client para que nos permita seleccionar archivos
         */
        private class MyWebChromeClient extends WebChromeClient {
    
            // maneja la accion de seleccionar archivos
            @Override
            public boolean onShowFileChooser(WebView webView, ValueCallback filePathCallback, FileChooserParams fileChooserParams) {
    
                // asegurar que no existan callbacks
                if (mUploadMessage != null) {
                    mUploadMessage.onReceiveValue(null);
                }
    
                mUploadMessage = filePathCallback;
    
                Intent i = new Intent(Intent.ACTION_GET_CONTENT);
                i.addCategory(Intent.CATEGORY_OPENABLE);
                i.setType("*/*"); // set MIME type to filter
    
                MainActivity.this.startActivityForResult(Intent.createChooser(i, "File Chooser"), MainActivity.FILECHOOSER_RESULTCODE );
    
                return true;
            }
        }
    
    }
    

    Hope can help you.

提交回复
热议问题