Android 如何在WebView中上载多个图像?

Android 如何在WebView中上载多个图像?,android,file-upload,webview,Android,File Upload,Webview,如何使我的应用程序的WebView中的文件上载行为与浏览器应用程序中的行为相同 我正在尝试在我的Android应用程序中创建一个网络视图,允许上传用相机拍摄的多幅图像 当我在浏览器应用程序中打开下面的HTML代码时,我可以附加多张图片。 当我在应用程序的WebView中有相同的代码时,该按钮甚至不会打开对话框 <form method="post" action="/save/images" name="send" id="send" enctype="multipart/form-dat

如何使我的应用程序的WebView中的文件上载行为与浏览器应用程序中的行为相同

我正在尝试在我的Android应用程序中创建一个网络视图,允许上传用相机拍摄的多幅图像

当我在浏览器应用程序中打开下面的HTML代码时,我可以附加多张图片。 当我在应用程序的WebView中有相同的代码时,该按钮甚至不会打开对话框

<form method="post" action="/save/images" name="send" id="send" enctype="multipart/form-data">
   <input type="file" name="data[]" id="camera" multiple="">
   <input type="submit" name="send">
</form>
在我的搜索中,我发现了许多使用未记录功能“openFileChooser”的参考资料:

   new WebChromeClient() {
        public void openFileChooser(ValueCallback<Uri> uploadMsg) {
            mUploadMessage = uploadMsg;
            Intent i = new Intent(Intent.ACTION_GET_CONTENT);
            i.addCategory(Intent.CATEGORY_OPENABLE);
            i.setType("image/*");
            Cv5appActivity.this.startActivityForResult(
                    Intent.createChooser(i, "Image Browser"),
                    FILECHOOSER_RESULTCODE);
        }
    }
新的WebChromeClient(){
public void openFileChooser(ValueCallback uploadMsg){
mUploadMessage=上传消息;
意向i=新意向(意向.行动\u获取\u内容);
i、 addCategory(意图。类别可打开);
i、 setType(“image/*”);
Cv5appActivity.this.startActivityForResult(
Intent.createChooser(i,“图像浏览器”),
文件选择器\u结果代码);
}
}
我只支持较新的Android版本(4.3及以上),并希望以支持和文档化的方式完成这项工作,但如果没有其他方法存在,将使用此方法。但是,我不知道“openFileChooser”方法将如何:

  • 允许拍摄/上载多个图像
  • 将捕获的图像返回到网页上的表单/ajax/html
若要使WebView像Android上的浏览器应用程序一样运行,或使WebChromeClient能够处理多个图像并“将它们交回WebView”,请提供任何建议


干杯

不久前,我确实解决了我的所有问题,使用了“openFileChooser”方法解决了其他问题。我需要发现/理解的关键信息是
ValueCallback
,它既是处理所选图像的方法,也是处理多个图像的责任

在实现“openFileChooser”方法时,您会收到一个
ValueCallback
,然后您将负责调用它的回调以将所选图像或空值返回,如:

mUploadMessage.onReceiveValue(null);
还请注意,如果不调用回调,您的WebView将停止正常工作

更新:


最近这个问题再次出现,所以现在我使用了一个fork-of-到目前为止,它工作得很好,而且我不必编写代码。

将这一行添加到ShowFileChooser上的

intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
此代码用于解析结果(请注意,
uploadMessages
是一个
ValueCallback
):

activityresult上的公共void(int-requestCode、int-resultCode、Intent-Intent){
super.onActivityResult(请求代码、结果代码、意图);
Uri[]results=null;
试一试{
if(resultCode==RESULT\u OK){
字符串dataString=intent.getDataString();
ClipData ClipData=intent.getClipData();
if(clipData!=null){
结果=新Uri[clipData.getItemCount()];
对于(int i=0;i

另请参见…

我没有尝试过这一点,但它可能会有所帮助:@LarryMcKenzie这似乎是openFileChooser方法的一个完整示例,但我仍然不知道它如何处理多个图像或将图像交还给WebView。
mUploadMessage.onReceiveValue(null);
intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
public void onActivityResult(int requestCode, int resultCode, Intent intent) {
        super.onActivityResult(requestCode, resultCode, intent);

        Uri[] results = null;
        try {
            if (resultCode == RESULT_OK) {
                String dataString = intent.getDataString();
                ClipData clipData = intent.getClipData();
                if (clipData != null) {
                    results = new Uri[clipData.getItemCount()];
                    for (int i = 0; i < clipData.getItemCount(); i++) {
                        ClipData.Item item = clipData.getItemAt(i);
                        results[i] = item.getUri();
                    }
                }
                if (dataString != null) {
                    results = new Uri[]{Uri.parse(dataString)};
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        uploadMessages.onReceiveValue(results);
        uploadMessages = null;


    }