Solução alternativa para upload de arquivos no Android 4.4 usando reflexão

Do Android 4.1 ao Android 4.3, você pode subclassificarWebChromeClient no Android e implemente o seguinte (oculto, portanto, não@Override) método:

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

Você abriria um seletor de arquivos nesse método e quando seuActivity recebe o resultado emonActivityResult(...), basta chamar o método único disponível noValueCallback<Uri> instância com o arquivo URI. É isso aí.

Infelizmente, esse método foi removido da API no Android 4.4 e não está mais sendo chamado.

Existequalquer como você pode solucionar isso, por exemplo com reflexão?

Quero dizer, você pode definir umonclick="..." ouvinte no<input type="file"> elemento em HTML, que ainda seria chamado.

Após interceptar oonclick="..." retorno de chamada em Java (talvez viaaddJavascriptInterface(...)) você pode abrir um seletor de arquivos, como de costume. Mas o problema é que não háValueCallback<Uri> instância disponível para a qual você poderia enviar seu resultado (o arquivo que foi escolhido) para.

Configurando ovalue="..." do<input type="file"> no HTML manualmente também não é possível, porque é somente leitura. Mas oWebView a própria implementação certamente pode escrever o valor, obviamente. Então, você poderia usar a reflexão para definir o valor lá ou encontrar outra solução alternativa?

Estou procurando uma solução mais limpa e mais confortável do que detectar o<input type="file"> clique (por exemplo, através doonclick="..." ouvinte) e fazendo a seleção e o upload de arquivos manualmente a partir de Java. Ativando Uploads de Arquivosno WebView, como deveriam funcionar, seria mais limpo, certamente.

questionAnswers(1)

yourAnswerToTheQuestion