我正在创建自己的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;
}
});
答案 0 :(得分:0)
Android 4.4有一个破坏文件输入的WebView错误。我的解决方法是使用Javascript在应用程序和网站之间进行通信,并检测用户何时想要上传文件,并从应用程序(在webview外部)上传,然后在文件加载完成后更新webview,告诉文件所在的网站。
请在这里查看我的答案,我在那里解释我的解决方案: https://stackoverflow.com/a/43443981/2566593
答案 1 :(得分:-1)
我已经尝试过您的代码并且已经看到了问题。检查这些适用于所有Android设备的code example,它允许使用webviewclient和webchrome客户端在您的Android应用程序上上传图像文件。