gpt4 book ai didi

android - 如何在我的 WebView 中上传多张图片?

转载 作者:行者123 更新时间:2023-11-29 00:17:55 27 4
gpt4 key购买 nike

如何使我应用的 WebView 中的文件上传行为与在浏览器应用中一样?

我正在尝试在我的 Android 应用程序中制作一个 WebView 以允许上传用相机拍摄的多张图像。

当我在浏览器应用程序中打开下面的 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>

如果您想尝试一下,这里有一个指向上述 HTML 的链接:http://codereaper.com/bugspray/so/25251993/html-sendimages/

这里的重点是 Android 应用程序本身与此无关,加载的 URL 包含一个在 Android 浏览器应用程序中运行的网页,您可以在其中使用相机上传一堆图像.

我尝试的当前状态包括授予应用程序权限:

<uses-feature android:name="android.hardware.camera" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.FLASHLIGHT"/>

创建 WebView 时允许 JavaScript 和 FileAccess:

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_report);

WebView webView = (WebView) findViewById(R.id.report_webview);

WebSettings settings = webView.getSettings();
settings.setJavaScriptEnabled(true);
webView.setWebChromeClient(new WebChromeClient());
webView.getSettings().setAllowFileAccess(true);

showProgressDialog(R.string.please_wait_title, R.string.please_wait_description);

webView.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
closeProgressDialog();
}
}
);

webView.loadUrl("http://codereaper.com/bugspray/so/25251993/html-sendimages/");
}

在我的搜索中,我发现了很多使用未记录的功能“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);
}
}

我只支持较新的 Android 版本(4.3 及更高版本),并希望以支持和记录的方式执行此操作,但如果不存在其他方法,我将使用此方法。但是我看不到“openFileChooser”方法将如何:

  • 允许拍摄/上传多张图片
  • 将抓取的图片返回给网页上的form/ajax/html

任何建议都将不胜感激,以使 WebView 像 Android 上的浏览​​器应用程序一样运行,或者使 WebChromeClient 能够处理多个图像并将它们“交还给 WebView”。

干杯

最佳答案

不久前,我确实使用涉及“openFileChooser”方法的 SO 上的其他答案解决了我所有的问题。我需要发现/理解的关键信息是 ValueCallback<Uri>这既是将选中图片交还的方式,又将处理多张图片的责任交给了WebView。

你得到一个 ValueCallback<Uri>在实现“openFileChooser”方法时,您负责调用其回调以返回所选图像或 null,例如:

mUploadMessage.onReceiveValue(null);

另请注意,如果您不调用回调,您的 WebView 将停止正常工作。

更新:

最近这个问题又出现了,所以现在我正在使用 https://github.com/delight-im/Android-AdvancedWebView 的分支- 目前它运行良好而且我不需要编写代码。

关于android - 如何在我的 WebView 中上传多张图片?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25251993/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com