从 Android 4.1 到 Android 4.3,您可以WebChromeClient
在 Android 上进行子类化并实现以下(隐藏,因此没有@Override
)方法:
public void openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType, String capture) { ... }
您将在该方法中打开一个文件选择器,当您在Activity
中收到结果时,只需使用文件 URIonActivityResult(...)
调用实例上可用的单个方法。ValueCallback<Uri>
而已。
不幸的是,此方法已从 Android 4.4 的 API 中删除,并且不再被调用。
有什么办法可以解决这个问题,例如反射?
我的意思是,你可以在 HTMLonclick="..."
中的元素上设置一个监听<input type="file">
器,它仍然会被调用。
onclick="..."
在 Java 中拦截回调后(可能通过addJavascriptInterface(...)
),您可以像往常一样打开文件选择器。但问题是没有ValueCallback<Uri>
可用的实例可以将结果(选择的文件)发送到。
手动设置HTMLvalue="..."
中的<input type="file">
也是不可能的,因为它是只读的。但WebView
显然,实现本身当然可以写入值。那么您可以使用反射在此处设置值或找到另一种解决方法吗?
我正在寻找一种比检测<input type="file">
点击(例如通过它的onclick="..."
侦听器)和从 Java 手动执行文件选择和文件上传更干净、更舒适的解决方案。在 WebView 中启用文件上传,因为它们应该工作,肯定会更干净。