Ich habe seit einigen Tagen Probleme, Dateien von WebView hochzuladen, und es gibt keine Fortschritte. Ich habe alle vorgeschlagenen Lösungen gegoogelt und implementiert, aber keine funktioniert, wie: hier vorgeschlagene Lösungen und so weiter.
Problem: Ich habe eine HTML-Seite mit dem folgenden Code zum Hochladen einer Datei. Es funktioniert gut in einem Desktop-Browser wie Firefox und einem integrierten Browser von Emulator / AVD. Wenn ich auf die Schaltfläche "Durchsuchen ..." klicke, die vom Element gerendert wird, öffnet der Browser ein Dialogfeld, in dem ich eine Datei zum Hochladen auswählen kann.
Wenn ich jedoch im Android 3.0-Emulator / AVD auf "Datei auswählen" klicke, passiert nichts, es wird kein Dateidialog geöffnet !!!
<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>
Könnte jemand bitte frühestens eine mögliche Lösung vorschlagen.
quelle
Webview
Unterklasse verwenden, die dasAdvancedWebView.isFileUploadAvailable()
ob Uploads unterstützt werden. Und Sie können Ihren Code teilen und um Hilfe bei den Problemen bitten: github.com/delight-im/Android-AdvancedWebView/issuesAntworten:
Dies ist eine vollständige Lösung für alle Android-Versionen, ich hatte auch Schwierigkeiten damit.
Außerdem möchte ich hinzufügen, dass die "Upload-Seite" wie die in diesem Beispiel bei <4 Versionen nicht funktioniert, da sie über eine Bildvorschau verfügt. Wenn Sie möchten, dass sie funktioniert, verwenden Sie einen einfachen PHP-Upload ohne Vorschau.
Update :
Sie finden die Lösung für Lutscher Geräte hier und Dank für gauntface
Update 2 :
Komplettlösung für alle Android-Geräte bis oreo hier und dies ist eine fortgeschrittenere Version , Sie sollten es sich ansehen, vielleicht kann es helfen.
quelle
progressBar
scheint dort unbenutzt. Ich kann nur sehen, dass es sich versteckt, aber nicht, wo es aktiviert ist. Ich denke, Sie müsstenonProgressChanged(...)
die benutzerdefinierteWebChromeClient
Variante dafür hinzufügen . (Und so etwas wiegetWindow().setFeatureInt( Window.FEATURE_PROGRESS, Window.PROGRESS_VISIBILITY_ON);
inonCreate
.)Arbeitsmethode von HONEYCOMB (API 11) bis Oreo (API 27)
[Nicht auf Pie 9.0 getestet]
Geändert
onActivityResult()
Jetzt in
onCreate()
oderonCreateView()
fügen Sie den folgenden Codequelle
Dies ist die einzige Lösung, die ich gefunden habe und die funktioniert!
quelle
In 5.0 Lollipop hat Google eine offizielle Methode hinzugefügt, WebChromeClient.onShowFileChooser . Sie bieten sogar die Möglichkeit, die Absicht der Dateiauswahl automatisch zu generieren, sodass die eingegebenen MIME-Typen verwendet werden.
Für Android-Versionen vor KitKat funktionieren die in den anderen Antworten genannten privaten Methoden. Ich habe keine gute Problemumgehung für KitKat (4.4) gefunden.
quelle
uploadMessage.onReceiveValue()
funktioniert und hat einen Abschluss)
Ich fand, dass ich 3 Schnittstellendefinitionen brauchte, um verschiedene Versionen von Android zu handhaben.
quelle
Diese Lösung funktioniert auch für Honeycomb und Ice Cream Sandwich. Anscheinend hat Google eine coole neue Funktion eingeführt (Attribut akzeptieren) und vergessen, aus Gründen der Abwärtskompatibilität eine Überlastung zu implementieren.
quelle
Die vollständige Lösung von hifarrer ist für mich sehr hilfreich.
Ich bin jedoch auf viele andere Probleme gestoßen - Unterstützung anderer MIME-Typen, Auflisten von Aufnahmegeräten (Kamera, Video, Audiorecoder), sofortiges Öffnen des Aufnahmegeräts (Beispiel: <input accept = "image / *; capture">) ...
Also habe ich eine Lösung entwickelt, die genauso funktioniert wie die Standard-Webbrowser-App.
Ich habe android-4.4.3_r1 / src / com / android / browser / UploadHandler.java verwendet. (danke an Rupert Rawnsley)
zusätzliche String-Resoruce von res / values / string.xml:
Wenn Sie proguard verwenden, benötigen Sie möglicherweise die folgende Option in proguard-project.txt:
UPDATE # 1 (2015.09.09)
Fügt Code für die Kompatibilität mit Android 5.0.1 hinzu.
quelle
Ich fand es notwendig
public void openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType, String capture)
, in Android 4.1 zu definieren . Dann folgte ich Michel Oliviers Lösung.quelle
Das ist Arbeit für mich. Arbeiten Sie auch für Nougat und Marshmallow [ [
quelle
Ich habe es tatsächlich geschafft, die Dateiauswahl in Kitkat anzuzeigen, ein Bild auszuwählen und den Dateipfad im Aktivitätsergebnis abzurufen, aber das einzige, was ich nicht "reparieren" kann (diese Problemumgehung verursachen), ist, die eingegebene Datei zum Füllen zu bringen raus mit Dateidaten.
Weiß jemand, wie man von einer Aktivität aus auf das Eingabefeld zugreift? Am dieses Beispiel unter Verwendung von Kommentar . Ist nur dieses letzte Stück, der letzte Stein in der Wand, den ich nur an der richtigen Stelle platzieren muss (obwohl ich das Hochladen der Bilddatei direkt aus dem Code auslösen könnte.
UPDATE # 1
Ich bin kein Hardcore-Android-Entwickler, also zeige ich Code auf Newbie-Ebene. Ich erstelle eine neue Aktivität in bereits vorhandenen Aktivitäten
Manifestierter Teil
Ist meine BrowseActivity Klasse aus diesem Beispiel zu schaffen Antwort . Die WebChromeClient () -Instanz sieht im Wesentlichen gleich aus, mit Ausnahme des letzten Teils, wodurch der Picker-UI-Teil ausgelöst wird ...
Und noch ein paar Sachen
}}
Zum Schluss noch etwas Code, um den tatsächlichen Dateipfad zu erhalten, Code, der auf SO gefunden wurde, und ich habe auch eine Post-URL in Kommentaren hinzugefügt, damit der Autor Credits für seine Arbeit erhält.
Zuletzt muss die HTML-Seite diese neue Methode von showPicker auslösen (speziell unter A4.4).
quelle
Googles eigener Browser bietet eine so umfassende Lösung für dieses Problem, dass er eine eigene Klasse garantiert:
openFileChooser-Implementierung in Android 4.0.4
UploadHandler-Klasse in Android 4.0.4
quelle
2019: Dieser Code hat bei mir funktioniert (Getestet auf Androids 5 - 9).
Hoffnung kann dir helfen.
quelle
Habe eine LÖSUNG gefunden, die für mich funktioniert! Fügen Sie der Datei eine weitere Regel hinzu
proguard-android.txt
:quelle
Kotlin-Lösung für Android 8:
Konstanten:
WebView-Setup:
Und der Teil onAcrtivityResult:
Bitte beachten Sie, dass unsere Intent-Variable "Daten" heißt.
quelle
Haben Sie diese Links besucht? 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/
Kurzes Beispiel für das Hochladen von Dateien über Java lib Apache Commons
Ich denke, Sie werden Hilfe davon bekommen
quelle
In KitKat können Sie das Storage Access Framework verwenden.
Storage Access Framework / Schreiben einer Client-App
quelle
Webview - Einzelne und mehrere Dateien auswählen
Sie benötigen zwei Minuten, um diesen Code zu implementieren:
build.gradle
Java-Code:
quelle
Ich bin neu in Andriod und habe auch damit zu kämpfen. Laut Google Referenzhandbuch WebView.
Beispielcode, den ich in MainActvity.java ausgeführt habe.
Ausgetrieben
quelle
Ich habe fast einen Monat lang zu diesem Thema recherchiert. Alles ist fehlgeschlagen. Alle Codes, die auf mehreren Websites angezeigt werden, funktionieren nicht gut. Aber hier gibt es die beste Lösung
https://github.com/chiclaim/android-webview-upload-file
Schritte
1) Klicken Sie auf Klonen oder herunterladen
2) Holen Sie sich die Zip-Datei in Ihr lokales Verzeichnis
3) Entpacken Sie die Zip-Datei
4) Öffnen Sie Android Studio
5) Gehe zu Datei ----> Öffnen ---> Navigiere zu dem Verzeichnis, in das du den Inhalt entpackt hast.
6) Ändern Sie die erforderliche Web-URL in webView.loadUrl ("Ihre URL hre"). in MainActivity.java
7) Funktioniert gut mit Version Android Studio 3.4.2
quelle