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.