Android 如何在WebView中上载多个图像?
如何使我的应用程序的WebView中的文件上载行为与浏览器应用程序中的行为相同 我正在尝试在我的Android应用程序中创建一个网络视图,允许上传用相机拍摄的多幅图像 当我在浏览器应用程序中打开下面的HTML代码时,我可以附加多张图片。 当我在应用程序的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
<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
干杯不久前,我确实解决了我的所有问题,使用了“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;
}