文件上传Android 4.4 WebView

时间:2016-04-28 02:04:20

标签: android file webview android-4.4-kitkat

我正在创建自己的Android应用程序,其中90%需要文件上传。

我获得了WebView Lollipop代码,它工作正常,但是当我尝试在Android 4.4中打开文件选择器时,输入无效。

任何人都可以帮助我吗?这是我的代码:

 mWebView.setWebChromeClient(new WebChromeClient() {

        public boolean onShowFileChooser(
                WebView webView, ValueCallback<Uri[]> filePathCallback,
                WebChromeClient.FileChooserParams fileChooserParams) {
            if(mFilePathCallback != null) {
                mFilePathCallback.onReceiveValue(null);
            }
            mFilePathCallback = filePathCallback;

            Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
            if (takePictureIntent.resolveActivity(getActivity().getPackageManager()) != null) {
                // Create the File where the photo should go
                File photoFile = null;
                try {
                    photoFile = createImageFile();
                    takePictureIntent.putExtra("PhotoPath", mCameraPhotoPath);
                } catch (IOException ex) {
                    // Error occurred while creating the File
                    Log.e(TAG, "Unable to create Image File", ex);
                }

                // Continue only if the File was successfully created
                if (photoFile != null) {
                    mCameraPhotoPath = "file:" + photoFile.getAbsolutePath();
                    takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT,
                            Uri.fromFile(photoFile));
                } else {
                    takePictureIntent = null;
                }
            }

            Intent contentSelectionIntent = new Intent(Intent.ACTION_GET_CONTENT);
            contentSelectionIntent.addCategory(Intent.CATEGORY_OPENABLE);
            contentSelectionIntent.setType("image/*");

            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, "Escoge tu imagen");
            chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, intentArray);

            startActivityForResult(chooserIntent, INPUT_FILE_REQUEST_CODE);

            return true;
        }
    });

2 个答案:

答案 0 :(得分:0)

Android 4.4有一个破坏文件输入的WebView错误。我的解决方法是使用Javascript在应用程序和网站之间进行通信,并检测用户何时想要上传文件,并从应用程序(在webview外部)上传,然后在文件加载完成后更新webview,告诉文件所在的网站。

请在这里查看我的答案,我在那里解释我的解决方案: https://stackoverflow.com/a/43443981/2566593

答案 1 :(得分:-1)

我已经尝试过您的代码并且已经看到了问题。检查这些适用于所有Android设备的code example,它允许使用webviewclient和webchrome客户端在您的Android应用程序上上传图像文件。