9

在 Android webview 中,当单击文件上传选项时,会调用 onShowFileChooser,其中会调用用户从图片库中选择要上传的文件的意图。选择文件后,在 onActivityResult 内部由于以下原因而崩溃

java.lang.IllegalStateException: Duplicate showFileChooser result
        at org.chromium.android_webview.AwWebContentsDelegateAdapter$2.onReceiveValue(AwWebContentsDelegateAdapter.java:225)
        at org.chromium.android_webview.AwWebContentsDelegateAdapter$2.onReceiveValue(AwWebContentsDelegateAdapter.java:220)
        at com.android.webview.chromium.WebViewContentsClientAdapter$4.onReceiveValue(WebViewContentsClientAdapter.java:1063)
        at com.android.webview.chromium.WebViewContentsClientAdapter$4.onReceiveValue(WebViewContentsClientAdapter.java:1047)
4

4 回答 4

16
@Override
public boolean onShowFileChooser(WebView webView, ValueCallback<Uri[]> filePathCallback, FileChooserParams fileChooserParams) {
    mActivity.setValueCallback(filePathCallback);
    Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
    intent.addCategory(Intent.CATEGORY_OPENABLE);
    intent.setType("*/*");
    mActivity.startActivityForResult(Intent.createChooser(intent, ""), Final.REQUEST_CODE_ALBUM);
    return true;
}

返回真

于 2016-06-02T09:25:02.057 回答
5

如果您覆盖onShowFileChooser并计划调用filePathCallback以传递结果,则必须返回 trueonShowFileChooser以告诉底层代码不要将值传递给filePathCallback.

真实的基本上是在说“我会处理它”

文档: @return true if filePathCallback will be invoked, false to use default handling.

于 2017-11-09T19:57:13.387 回答
0

我认为您需要实现 webview 并扩展 webview chrome 客户端来处理您的 android 手机应用程序上的文件上传。您可以阅读这些文章可能会帮助您了解如何实现 webview 客户端类和 webchrome 客户端

于 2016-07-16T18:18:46.200 回答
0

这可能是因为您将在 uri 中获取数据,然后创建 uri 数组的新对象。在 C# 中,我做了以下解决问题:给出重复错误的代码:

  Android.Net.Uri result = data == null || resultCode != Result.Ok ? null :  data.Data ;
var a = new Android.Net.Uri[] { result };

下面的代码解决了这个问题:

Android.Net.Uri[] result = data == null || resultCode != Result.Ok ? null : new Android.Net.Uri[] { data.Data };

于 2016-10-28T05:25:44.113 回答