gpt4 book ai didi

android - 使用反射在 Android 4.4 上上传文件的解决方法

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:37:14 24 4
gpt4 key购买 nike

从 Android 4.1 到 Android 4.3,您可以子类化 WebChromeClient在 Android 上并实现以下(隐藏,因此没有 @Override)方法:

public void openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType, String capture) { ... }

你会在那个方法中打开一个文件选择器,当你的 ActivityonActivityResult(...) 中接收结果, 只需调用 ValueCallback<Uri> 上可用的单一方法带有文件 URI 的实例。就是这样。

不幸的是,此方法已从 Android 4.4 的 API 中删除,不再被调用。

有什么方法可以解决这个问题,例如用反射?

我的意思是,你可以设置一个 onclick="..." <input type="file"> 上的监听器HTML 中的元素,仍然会被调用。

截获 onclick="..." 后Java 中的回调(可能通过 addJavascriptInterface(...) ),您可以像往常一样打开文件选择器。但问题是没有 ValueCallback<Uri>您可以将结果(选择的文件)发送到的可用实例。

设置value="..."<input type="file">手动在 HTML 中也是不可能的,因为它是只读的。但是 WebView显然,实现本身当然可以写入值。那么您可以使用反射在那里设置值还是找到其他解决方法?

我正在寻找比检测 <input type="file"> 更干净、更舒适的解决方案单击(例如通过其 onclick="..." 监听器)并从 Java 手动进行文件选择和文件上传。在 WebView 中启用文件上传,因为它们应该工作,当然会更干净。

最佳答案

如果您正在寻找一个干净的解决方案来执行此操作,而无需使用棘手的 Javascript 代码和检测器。我建议使用 Webview 替代方案。

人行横道
我会推荐这个。它的工作方式类似于官方 webview。它是开源的,由 ChromeView 背后的同一个人制作.他们有一个很棒的设置指南:https://crosswalk-project.org/documentation/embedding_crosswalk.html

查看:https://crosswalk-project.org/

Chromium 网页 View
同样受到 ChromeView 的启发。他们声称已经集成了与官方 webview 相同的 API,以便于迁移。但它们表明 Webview 仍然可能有点不稳定。

查看:https://github.com/mogoweb/chromium_webview

壁虎 View
由 Mozilla 制作。这是一个 demo project使用它。 Mozilla 警告:“这不是 drop webview 的替代品并且非常不稳定”,但它有 file upload

查看:https://wiki.mozilla.org/Mobile/GeckoView

如果您对使用 Javascript 持开放态度(可能对其他人有用),请尝试:

Kitkat 网页 View
它使用 javascript 在 KitKat webview 中启用文件上传来执行此操作。该演示允许您上传图像,但您应该能够对其进行编辑以满足您的需要。

查看:https://github.com/henrychuangtw/Kitkat-WebView

关于android - 使用反射在 Android 4.4 上上传文件的解决方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28246556/

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