J'ai du mal à télécharger des fichiers depuis WebView depuis quelques jours et il n'y a pas de progrès. J'ai recherché et mis en œuvre toutes les solutions suggérées, mais aucune ne fonctionne, comme: les solutions suggérées ici , etc.
Problème: j'ai une page HTML avec le code suivant pour télécharger un fichier. Cela fonctionne bien dans un navigateur de bureau comme Firefox et le navigateur intégré de l'émulateur / AVD, c'est-à-dire que lorsque je clique sur le bouton "Parcourir ..." rendu par élément, le navigateur ouvre une boîte de dialogue où je peux choisir un fichier à télécharger.
Cependant, dans l'émulateur / AVD android 3.0, lorsque je clique sur "Choisir un fichier", rien ne se passe, aucune boîte de dialogue de fichier ne s'ouvre !!!
<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>
Quelqu'un pourrait-il suggérer une solution possible au plus tôt.
la source
Webview
sous - classe qui gère automatiquement les téléchargements de fichiers, etc.: github.com/delight-im/Android-AdvancedWebViewAdvancedWebView.isFileUploadAvailable()
si les téléchargements sont pris en charge. Et vous pouvez partager votre code et demander de l'aide sur les problèmes: github.com/delight-im/Android-AdvancedWebView/issuesRéponses:
C'est une solution complète pour toutes les versions d'Android, j'ai également eu du mal avec cela.
Aussi, je veux ajouter que la "page de téléchargement" comme celle de cet exemple, ne fonctionnera pas sur <4 versions, car elle a une fonction de prévisualisation d'image, si vous voulez la faire fonctionner, utilisez un simple téléchargement php sans aperçu.
Mise à jour :
Veuillez trouver la solution pour les appareils sucette ici et merci pour gauntface
Mise à jour 2 :
Solution complète pour tous les appareils Android jusqu'à oreo ici et c'est une version plus avancée , vous devriez l'examiner, peut-être que cela peut vous aider.
la source
progressBar
semble inutilisé là-bas. Je peux voir sa dissimulation uniquement, mais pas là où elle est activée. Je pense que vous devrez ajouteronProgressChanged(...)
à laWebChromeClient
variante personnalisée pour cela. (Et quelque chose commegetWindow().setFeatureInt( Window.FEATURE_PROGRESS, Window.PROGRESS_VISIBILITY_ON);
dedansonCreate
.)Méthode de travail de HONEYCOMB (API 11) à Oreo (API 27)
[Non testé sur Pie 9.0]
Modifié
onActivityResult()
Maintenant
onCreate()
ouonCreateView()
collez le code suivantla source
c'est la seule solution que j'ai trouvée qui fonctionne!
la source
Dans 5.0 Lollipop, Google a ajouté une méthode officielle, WebChromeClient.onShowFileChooser . Ils fournissent même un moyen de générer automatiquement l'intention du sélecteur de fichiers afin qu'il utilise les types mime d'acceptation d'entrée.
Pour les versions d'Android antérieures à KitKat, les méthodes privées mentionnées dans les autres réponses fonctionnent. Je n'ai pas trouvé de bonne solution de contournement pour KitKat (4.4).
la source
uploadMessage.onReceiveValue()
fonctionne et a une fin)
J'ai trouvé que j'avais besoin de 3 définitions d'interface pour gérer différentes versions d'Android.
la source
Cette solution fonctionne également pour Honeycomb et Ice Cream Sandwich. On dirait que Google a introduit une nouvelle fonctionnalité intéressante (attribut d'acceptation) et a oublié d'implémenter une surcharge pour la compatibilité descendante.
la source
La solution complète de hifarrer m'est très utile.
mais j'ai rencontré de nombreux autres problèmes - prise en charge d'autres types de mime, liste des périphériques de capture (caméra, vidéo, recodeur audio), ouverture immédiate du périphérique de capture (ex: <input accept = "image / *; capture">) ...
J'ai donc créé une solution qui fonctionne exactement de la même manière que l'application de navigateur Web par défaut.
J'ai utilisé android-4.4.3_r1 / src / com / android / browser / UploadHandler.java. (merci à Rupert Rawnsley)
resoruce de chaîne supplémentaire de res / values / string.xml:
Si vous utilisez proguard, vous aurez peut-être besoin de l'option ci-dessous dans proguard-project.txt:
MISE À JOUR # 1 (09/09/2015)
ajoute du code pour la compatibilité Android 5.0.1.
la source
C'est du travail pour moi. Fonctionne également pour le nougat et la guimauve [ [
la source
J'ai trouvé nécessaire de définir
public void openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType, String capture)
, dans Android 4.1. Puis j'ai suivi la solution de Michel Olivier.la source
J'ai en fait réussi à faire apparaître le sélecteur de fichiers dans Kitkat, à sélectionner une image et à obtenir le chemin du fichier dans le résultat de l'activité, mais la seule chose que je ne suis pas en mesure de "réparer" (cause de cette solution de contournement) est de remplir le champ d'entrée avec les données de fichier.
Quelqu'un sait-il comment accéder au champ de saisie à partir d'une activité? J'utilise cet exemple de commentaire . Est-ce juste ce dernier morceau, la dernière brique dans le mur que je dois juste mettre au bon endroit (bien que je puisse déclencher le téléchargement du fichier image directement à partir du code.
MISE À JOUR # 1
Je ne suis pas un développeur Android hardcore donc je montrerai le code au niveau du débutant. Je crée une nouvelle activité dans une activité déjà existante
Partie manifeste
Je crée ma classe BrowseActivity à partir de cet exemple de réponse . L'instance WebChromeClient () a essentiellement la même apparence, à l'exception du dernier élément, déclenchant la partie de l'interface utilisateur du sélecteur ...
Et encore plus de trucs
}
Enfin, un peu plus de code pour obtenir le chemin du fichier réel, le code trouvé sur SO, ive a également ajouté une URL de publication dans les commentaires afin que l'auteur obtienne des crédits pour son travail.
Enfin, la page HTML doit déclencher cette nouvelle méthode de showPicker (en particulier sur A4.4)
la source
Le propre navigateur de Google offre une solution si complète à ce problème qu'il justifie sa propre classe:
implémentation openFileChooser dans Android 4.0.4
Classe UploadHandler dans Android 4.0.4
la source
2019: Ce code a fonctionné pour moi (Testé sur les androïdes 5-9).
L'espoir peut vous aider.
la source
J'ai trouvé une SOLUTION qui fonctionne pour moi! Ajoutez une autre règle dans le fichier
proguard-android.txt
:la source
Solution Kotlin pour Android 8:
Constantes:
Configuration de WebView:
Et la partie onAcrtivityResult:
Veuillez faire attention à notre variable d'intention appelée «données».
la source
avez-vous visité ces liens? 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/
Exemple concis de téléchargement de fichiers via Java lib Apache Commons
je pense que vous obtiendrez de l'aide
la source
Dans KitKat, vous pouvez utiliser Storage Access Framework.
Framework d'accès au stockage / Écriture d'une application client
la source
Webview - Choix de fichiers uniques et multiples
vous avez besoin de deux minutes pour implémenter ce code:
build.gradle
code java:
la source
Je suis nouveau sur Andriod et j'ai eu du mal avec ça aussi. Selon le guide de référence Google WebView.
Exemple de code que j'ai exécuté dans MainActvity.java.
Excuté
la source
J'ai fait des recherches sur cette question pendant près d'un mois. Tout a échoué. Tous les codes affichés sur plusieurs sites Web ne fonctionnent pas correctement. Mais voici la meilleure solution
https://github.com/chiclaim/android-webview-upload-file
Pas
1) Cliquez sur cloner ou télécharger
2) Obtenez le fichier zip dans votre répertoire local
3) décompressez le fichier zip
4) Ouvrez le studio Android
5) Aller au fichier ----> Ouvrir ---> Accédez au répertoire où vous avez décompressé le contenu.
6) Modifiez l'url Web requise dans webView.loadUrl ("votre url hre"); dans MainActivity.java
7) Fonctionne bien avec la version Android Studio 3.4.2
la source