Make Android WebView Support File Upload

How to make android webview support image or files upload

The webview of android can be configured to support file upload, the code below can make the webview support file upload

The code is a bit long, so you need carefully implement it to your webview activity, remeber to place the code below the setWebviewClient.

For reference, i will upload the full code file here in the end of this post, you can use it for reference.


The code for enabling file upload in webview


First, add these code above the oncreate method


    private static final int REQUEST_STORAGE = 1;
    private static final int REQUEST_LOCATION = 2;
    public ValueCallback<Uri> mUploadMessage;
    public static final int FILECHOOSER_RESULTCODE = 5173;


Then add this code below webviewclient


public void openFileChooser(ValueCallback<Uri> uploadMsg) {
              this.openFileChooser(uploadMsg, "*/*");

          public void openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType) {
              this.openFileChooser(uploadMsg, acceptType, null);

          public void openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType, String capture) {
              mUploadMessage = uploadMsg;
              Intent i = new Intent(Intent.ACTION_GET_CONTENT);
              WebActivityDark.this.startActivityForResult(Intent.createChooser(i, "File Browser"),

          public boolean onShowFileChooser(

                  WebView webView, ValueCallback<Uri[]> filePathCallback,
                  FileChooserParams fileChooserParams) {
              if (mUMA != null) {
              mUMA = filePathCallback;
              Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
              if (takePictureIntent.resolveActivity(WebActivityDark.this.getPackageManager()) != null) {
                  File photoFile = null;
                  try {
                      photoFile = createImageFile();
                      takePictureIntent.putExtra("PhotoPath", mCM);
                  } catch (IOException ex) {
                      Log.e(TAG, "Image file creation failed", ex);
                  if (photoFile != null) {
                      mCM = "file:" + photoFile.getAbsolutePath();
                      takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(photoFile));
                  } else {
                      takePictureIntent = null;

              Intent contentSelectionIntent = new Intent(Intent.ACTION_GET_CONTENT);
              Intent[] intentArray;
              if (takePictureIntent != null) {
                  intentArray = new Intent[]{takePictureIntent};
              } else {
                  intentArray = new Intent[0];

              Intent chooserIntent = new Intent(Intent.ACTION_CHOOSER);
              chooserIntent.putExtra(Intent.EXTRA_INTENT, contentSelectionIntent);
              chooserIntent.putExtra(Intent.EXTRA_TITLE, "Image Chooser");
              chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, intentArray);
              startActivityForResult(chooserIntent, FCR);
              return true;

  protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
      super.onActivityResult(requestCode, resultCode, intent);
      if (Build.VERSION.SDK_INT >= 21) {
          Uri[] results = null;
          //Check if response is positive
          if (resultCode == Activity.RESULT_OK) {
              if (requestCode == FCR) {
                  if (null == mUMA) {
                  if (intent == null) {
                      //Capture Photo if no image available
                      if (mCM != null) {
                          results = new Uri[]{Uri.parse(mCM)};
                  } else {
                      String dataString = intent.getDataString();
                      if (dataString != null) {
                          results = new Uri[]{Uri.parse(dataString)};
          mUMA = null;
      } else {
          if (requestCode == FCR) {
              if (null == mUM) return;
              Uri result = intent == null || resultCode != RESULT_OK ? null : intent.getData();
              mUM = null;

  private class Callback extends WebViewClient {
      public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
          Toast.makeText(getApplicationContext(), "Failed loading! try reloading", Toast.LENGTH_SHORT).show();

  // Create an image file
  private File createImageFile() throws IOException {
      @SuppressLint("SimpleDateFormat") String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
      String imageFileName = "img_" + timeStamp + "_";
      File storageDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
      return File.createTempFile(imageFileName, ".jpg", storageDir);



For your reference, the full java code is here WebActivity

, ,

Post navigation

14 thoughts on “Make Android WebView Support File Upload

  1. Can you please provide the entire ( all files )soure code for WebView which supports file upload ??

  2. Hi Admin, This code didn’t work for me,
    My website is a WordPress website (Hope that’s not a criteria for it not to work.)
    Can you please help me out?

  3. Hi Admin, thanks for your feedback.

    I don’t really know how to import parameters (I’m new to Android Studio).

    I just copied the code below the existing code on “MainActivity”

  4. Hi, looking for a simple example to only use with android file upload.
    Open website with loadUrl() and click there “Choose file….”, but can not get it to work
    with webView :-/

    Can you help and provide very basic working example project for this?

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.