Обходной путь для загрузки файлов на Android 4.4 с использованием отражения

С Android 4.1 до Android 4.3, вы можете подклассWebChromeClient на Android и реализовать следующее (скрытый, таким образом, нет@Override) метод:

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

Вы открываете файл выбора в этом методе, и когда вашActivity получает результат вonActivityResult(...)просто вызовите единственный метод, который доступен наValueCallback<Uri> экземпляр с файловым URI. Вот и все.

К сожалению, этот метод был удален из API в Android 4.4 и больше не вызывается.

Естьлюбой как вы можете обойти это, например, с отражением?

Я имею в виду, вы могли бы установитьonclick="..." слушатель на<input type="file"> элемент в HTML, который все равно будет называться.

После перехватаonclick="..." обратный вызов в Java (может быть, черезaddJavascriptInterface(...)) вы можете открыть средство выбора файлов как обычно. Но проблема в том, что нетValueCallback<Uri> Доступен экземпляр, в который можно отправить свой результат (выбранный файл).

Настройкаvalue="..." из<input type="file"> в HTML вручную также невозможно, потому что это только для чтения. НоWebView Очевидно, что сама реализация может записать значение. Так что вы могли бы использовать отражение, чтобы установить значение или найти другой обходной путь?

Я ищу более чистое и удобное решение, чем обнаружение<input type="file"> нажмите (например, через егоonclick="..." слушатель) и делает выбор файла и загрузку файла вручную из Java. Включение загрузки файловв веб-представлении, как они должны работать, было бы чище, конечно.

Ответы на вопрос(1)

Ваш ответ на вопрос