Tenho lutado para fazer upload de arquivos do WebView desde os últimos dias e não há progresso. Eu pesquisei e implementei todas as soluções sugeridas, mas nenhuma funciona, como: soluções sugeridas aqui e assim por diante.
Problema: tenho uma página HTML com o seguinte código para carregar um arquivo. Funciona bem em um navegador de desktop como o Firefox e um navegador embutido do emulador / AVD, ou seja, quando clico no botão "Browse ..." processado por elemento, o navegador abre uma caixa de diálogo onde posso escolher um arquivo para carregar.
No entanto, no emulador do Android 3.0 / AVD, quando clico em "Escolher arquivo", nada acontece, nenhuma caixa de diálogo é aberta !!!
<form method="POST" enctype="multipart/form-data">
File to upload: <input type="file" name="uploadfile">
<input type="submit" value="Press to Upload..."> to upload the file!
</form>
Alguém poderia sugerir uma possível solução o mais rapidamente possível.
fonte
Webview
subclasse que lida com o upload de arquivos etc. automaticamente: github.com/delight-im/Android-AdvancedWebViewAdvancedWebView.isFileUploadAvailable()
se há suporte para uploads. E você pode compartilhar seu código e solicitar ajuda nos problemas: github.com/delight-im/Android-AdvancedWebView/issuesRespostas:
Esta é uma solução completa para todas as versões do Android, também tive problemas com isso.
Também quero acrescentar que a "página de upload", como a deste exemplo, não funcionará em <4 versões, pois possui um recurso de visualização de imagem, se você quiser fazê-lo funcionar, use um simples upload de php sem visualização.
Atualização :
Encontre a solução para dispositivos pirulito aqui e obrigado por gauntface
Atualização 2 :
Solução completa para todos os dispositivos Android até a oreo aqui e esta é a versão mais avançada , você deve pesquisar, talvez possa ajudar.
fonte
progressBar
parece não utilizado lá. Eu posso ver apenas o esconderijo, mas não onde está ativado. Eu acho que você precisará adicionaronProgressChanged(...)
àWebChromeClient
variante personalizada para isso. (E algo comogetWindow().setFeatureInt( Window.FEATURE_PROGRESS, Window.PROGRESS_VISIBILITY_ON);
emonCreate
.)Método de trabalho de HONEYCOMB (API 11) a Oreo (API 27)
[Não testado na torta 9.0]
Modificado
onActivityResult()
Agora,
onCreate()
ouonCreateView()
cole o seguinte códigofonte
esta é a única solução que eu achei que funciona!
fonte
No Lollipop 5.0, o Google adicionou um método oficial, WebChromeClient.onShowFileChooser . Eles ainda fornecem uma maneira de gerar automaticamente a intenção do seletor de arquivos para que ele use os tipos MIME de entrada aceitos.
Para versões do Android anteriores ao KitKat, os métodos particulares mencionados nas outras respostas funcionam. Não encontrei uma boa solução alternativa para o KitKat (4.4).
fonte
uploadMessage.onReceiveValue()
funciona, e tem uma estreita)
Descobri que precisava de três definições de interface para lidar com várias versões do Android.
fonte
Esta solução também funciona para favo de mel e sanduíche de sorvete. Parece que o Google introduziu um novo recurso interessante (atributo de aceitação) e esqueceu de implementar uma sobrecarga para compatibilidade com versões anteriores.
fonte
A solução completa do hifarrer é muito útil para mim.
mas encontrei muitos outros problemas - suporte a outro tipo de mímica, listando dispositivos de captura (câmera, vídeo, recodificador de áudio), abrindo imediatamente o dispositivo de captura (por exemplo: <input accept = "image / *; capture">) ...
Então, criei uma solução que funciona exatamente da mesma forma que o aplicativo padrão de navegador da web.
Eu usei android-4.4.3_r1 / src / com / android / browser / UploadHandler.java. (graças a Rupert Rawnsley)
reabsorção de sequência adicional de res / values / string.xml:
Se você estiver usando proguard, poderá precisar da opção abaixo em proguard-project.txt:
ATUALIZAÇÃO # 1 (09.09.2015)
adiciona código para compatibilidade com Android 5.0.1.
fonte
Isso é trabalho para mim. Também trabalhe para o Nougat e o Marshmallow [ [
fonte
Eu achei necessário definir
public void openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType, String capture)
, no Android 4.1. Depois segui a solução de Michel Olivier.fonte
Na verdade, consegui fazer com que o seletor de arquivos apareça no Kitkat, selecione uma imagem e obtenha o caminho do arquivo no resultado da atividade, mas a única coisa que não consigo "consertar" (causar essa solução alternativa) é fazer com que a entrada arquivada seja preenchida com dados de arquivo.
Alguém sabe como acessar o campo de entrada de uma atividade? Estou usando este comentário de exemplo . É apenas esta última peça, o último tijolo na parede que eu apenas tenho que colocar no lugar certo (para que eu possa acionar o upload do arquivo de imagem diretamente do código.
ATUALIZAÇÃO # 1
Eu não sou um desenvolvedor Android hardcore, então eu mostrarei o código no nível de iniciante. Estou criando uma nova atividade em atividade já existente
Parte do manifesto
Estou criando minha classe BrowseActivity a partir desta resposta de exemplo . A instância WebChromeClient () basicamente parece a mesma, exceto a última peça, acionando a parte da interface do usuário do seletor ...
E mais algumas coisas
}
Por fim, um pouco mais de código para obter o caminho do arquivo real, o código encontrado no SO, acrescentou URL de postagem nos comentários, para que o autor receba créditos por seu trabalho.
Por fim, a página HTML precisa acionar esse novo método de showPicker (especificamente quando está no A4.4)
fonte
O navegador do Google oferece uma solução tão abrangente para esse problema que garante sua própria classe:
Implementação do openFileChooser no Android 4.0.4
Classe UploadHandler no Android 4.0.4
fonte
2019: este código funcionou para mim (testado nos Androids 5-9).
A esperança pode ajudá-lo.
fonte
Encontrei uma SOLUÇÃO que funciona para mim! Adicione mais uma regra no arquivo
proguard-android.txt
:fonte
Solução Kotlin para Android 8:
Constantes:
Configuração do WebView:
E a parte onAcrtivityResult:
Por favor, preste atenção que a nossa variável intent chamada "data".
fonte
você visitou esses links? http://groups.google.com/group/android-developers/browse_thread/thread/dcaf8b2fdd8a90c4/62d5e2ffef31ebdb
http://moazzam-khan.com/blog/?tag=android-upload-file
http://evgenyg.wordpress.com/2010/05/01/uploading-files-multipart-post-apache/
Exemplo conciso de upload de arquivo via Java lib Apache Commons
Eu acho que você receberá ajuda com isso
fonte
No KitKat, você pode usar o Storage Access Framework.
Estrutura de acesso de armazenamento / Gravação de um aplicativo cliente
fonte
Visualização na Web - Escolha um ou vários arquivos
você precisa de dois minutos para implementar este código:
build.gradle
código java:
fonte
Eu sou novo na Andriod e lutei com isso também. De acordo com o Guia de referência do Google WebView.
Código de exemplo que eu executei em MainActvity.java.
Excuted
fonte
Eu pesquisei sobre esse assunto por quase um mês. Tudo falhou. Todos os códigos vistos em vários sites não funcionam bem. Mas aqui existe a melhor solução
https://github.com/chiclaim/android-webview-upload-file
Passos
1) Clique no clone ou faça o download
2) Obtenha o arquivo zip no diretório local
3) descompacte o arquivo zip
4) estúdio Android aberto
5) Goto File ----> Open ---> Navegue para o diretório em que você descompactou o conteúdo.
6) Altere o URL da web necessário em webView.loadUrl ("your url hre"); em MainActivity.java
7) Funciona bem com a versão Android studio 3.4.2
fonte