Search code examples
androidandroid-webviewandroid-4.2-jelly-bean

Chose File In Webview 4.2.2 (Android Studio)


I try to input the image file in my html page in webview 4.2.2 But the input file does not work. Do you have the solution for my problem ? please help me

This is my code (Tambah.java) :

public class Tambah extends Activity {

private TextView text2;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.tambah);

    final WebView myWebView = (WebView) findViewById(R.id.webPage);
    WebSettings webSettings = myWebView.getSettings();
    webSettings.setJavaScriptEnabled(true);
    myWebView.loadUrl("http://192.168.1.104/safa/tambah");
    myWebView.setOnKeyListener(new View.OnKeyListener()
    {
        @Override
        public boolean onKey(View v, int keyCode, KeyEvent event)
        {
            if(event.getAction() == KeyEvent.ACTION_DOWN)
            {
                WebView myWebView = (WebView) v;

                switch(keyCode)
                {
                    case KeyEvent.KEYCODE_BACK:
                        if(myWebView.canGoBack())
                        {
                            myWebView.goBack();
                            return true;
                        }
                        break;
                }
            }

            return false;
        }
    });
}

}


Solution

  • You have to override the onShowFileChooser method in your WebChromeClient like below:

    mWebView.setWebChromeClient(new WebChromeClient() {
    
                @Override
                public boolean onShowFileChooser(WebView webView, ValueCallback<Uri[]> filePathCallback, FileChooserParams fileChooserParams) {
                    mFilePathCallback = filePathCallback;
                    Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
                    intent.setType("*/*");
                    startActivityForResult(intent, PICKFILE_REQUEST_CODE);
                    return true;
                }
            });
    

    And then onActivityResult do the following:

    @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
            if (requestCode == PICKFILE_REQUEST_CODE) {
                //Uri result = intent.getData();
                Uri result = intent == null || resultCode != RESULT_OK ? null
                        : intent.getData();
                if(result != null){
                    Uri[] resultsArray = new Uri[1];
                    resultsArray[0] = result;
                    mFilePathCallback.onReceiveValue(resultsArray);
                }
                else
                    mFilePathCallback.onReceiveValue(null);
    
            }
        }
    

    and define a static int for your request code in your activity like:

    private static final int PICKFILE_REQUEST_CODE = 1;
    

    It should work like charm.