Saya telah berjuang keras untuk mengunggah file dari WebView sejak beberapa hari terakhir dan tidak ada kemajuan. Saya mencari Google dan mengimplementasikan semua solusi yang disarankan tetapi tidak ada yang berhasil, seperti: solusi yang disarankan di sini , dan seterusnya.
Masalah: Saya memiliki halaman HTML dengan kode berikut untuk mengunggah file. Ini berfungsi baik di browser desktop seperti Firefox dan browser built-in emulator / AVD yaitu, ketika saya mengklik tombol "Browse ..." yang diberikan oleh elemen, browser membuka kotak Dialog di mana saya dapat memilih file untuk diunggah.
Namun, di emulator Android 3.0 / AVD, ketika saya mengklik "Pilih file", tidak ada yang terjadi, tidak ada dialog file yang dibuka !!!
<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>
Adakah yang bisa menyarankan solusi yang mungkin paling cepat.
sumber
Webview
subclass yang menangani upload file dll secara otomatis: github.com/delight-im/Android-AdvancedWebViewAdvancedWebView.isFileUploadAvailable()
apakah unggahan didukung. Dan Anda dapat berbagi kode Anda dan meminta bantuan dalam masalah: github.com/delight-im/Android-AdvancedWebView/issuesJawaban:
Ini adalah solusi lengkap untuk semua versi Android, saya mengalami kesulitan dengan ini juga.
Saya juga ingin menambahkan bahwa "unggah halaman" seperti yang ada dalam contoh ini, tidak akan berfungsi pada versi <4, karena ia memiliki fitur pratinjau gambar, jika Anda ingin membuatnya berfungsi gunakan unggahan php sederhana tanpa pratinjau.
Perbarui :
Silakan temukan solusi untuk perangkat lollipop di sini dan terima kasih atas gauntface
Pembaruan 2 :
Solusi lengkap untuk semua perangkat android hingga oreo di sini dan ini adalah versi yang lebih canggih , Anda harus memeriksanya, mungkin itu bisa membantu.
sumber
progressBar
tampaknya tidak terpakai di sana. Saya bisa melihat persembunyiannya saja, tetapi tidak di mana itu diaktifkan. Saya pikir Anda perlu menambahkan varianonProgressChanged(...)
khususWebChromeClient
untuk itu. (Dan sesuatu sepertigetWindow().setFeatureInt( Window.FEATURE_PROGRESS, Window.PROGRESS_VISIBILITY_ON);
keonCreate
.)Metode Kerja dari HONEYCOMB (API 11) hingga Oreo (API 27)
[Tidak Diuji pada Pie 9.0]
Diubah
onActivityResult()
Sekarang masuk
onCreate()
atauonCreateView()
rekatkan kode berikutsumber
ini adalah satu-satunya solusi yang saya temukan yang berfungsi!
sumber
Di 5.0 Lollipop, Google menambahkan metode resmi, WebChromeClient.onShowFileChooser . Mereka bahkan menyediakan cara untuk secara otomatis menghasilkan maksud pemilih file sehingga menggunakan input yang menerima tipe mime.
Untuk versi Android sebelum KitKat, metode pribadi yang disebutkan dalam jawaban lain berfungsi. Saya belum menemukan solusi yang baik untuk KitKat (4.4).
sumber
uploadMessage.onReceiveValue()
bekerja, dan memiliki)
Saya menemukan bahwa saya memerlukan 3 definisi antarmuka untuk menangani berbagai versi android.
sumber
Solusi ini juga berfungsi untuk Honeycomb dan Ice Cream Sandwich. Sepertinya Google memperkenalkan fitur baru yang keren (menerima atribut) dan lupa menerapkan kelebihan untuk kompatibilitas ke belakang.
sumber
Solusi lengkap hifarrer sangat membantu saya.
tetapi, saya menemui banyak masalah lain - mendukung tipe pantomim lainnya, mendaftarkan perangkat penangkapan (kamera, video, audio recoder), segera membuka perangkat penangkapan (mis: <input accept = "image / *; capture">) ...
Jadi, saya membuat solusi yang bekerja persis sama dengan aplikasi browser web default.
Saya menggunakan android-4.4.3_r1 / src / com / android / browser / UploadHandler.java. (terima kasih kepada Rupert Rawnsley)
resesi string tambahan res / values / string.xml:
Jika Anda menggunakan proguard, Anda mungkin perlu opsi di bawah ini di proguard-project.txt:
UPDATE # 1 (2015.09.09)
menambahkan kode untuk kompatibilitas Android 5.0.1.
sumber
Ini bekerja untuk saya. Juga bekerja untuk Nougat dan Marshmallow [ [
sumber
Saya merasa perlu mendefinisikan
public void openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType, String capture)
, di Android 4.1. Lalu saya mengikuti solusi Michel Olivier.sumber
Ive sebenarnya berhasil membuat pemilih file muncul di Kitkat, untuk memilih gambar dan untuk mendapatkan filepath dalam hasil aktivitas tetapi satu-satunya hal yang saya tidak dapat "perbaiki" (menyebabkan penyelesaian ini) adalah membuat input diajukan untuk mengisi dengan data file.
Adakah yang tahu bagaimana cara mengakses kolom input dari suatu kegiatan? Saya menggunakan contoh komentar ini . Apakah ini hanya bagian terakhir, batu bata terakhir di dinding yang harus saya letakkan di tempat yang tepat (yang dapat memicu unggahan file gambar langsung dari kode.
PEMBARUAN # 1
Saya bukan pengembang Android hardcore, jadi saya akan menunjukkan kode pada level pemula. Saya membuat Aktivitas baru di Aktivitas yang sudah ada
Manifestasi bagian
Saya membuat kelas BrowseActivity dari jawaban contoh ini . Contoh WebChromeClient () pada dasarnya terlihat sama, kecuali bagian terakhir, memicu bagian UI pemilih ...
Dan beberapa hal lagi
}
Terakhir, beberapa kode lagi untuk mendapatkan jalur file yang sebenarnya, kode yang ditemukan pada SO, ive menambahkan url posting di komentar juga sehingga penulis mendapatkan kredit untuk karyanya.
Terakhir, halaman HTML perlu memicu metode baru showPicker (khusus ketika di A4.4)
sumber
Browser Google sendiri menawarkan solusi komprehensif untuk masalah ini sehingga menjamin kelasnya sendiri:
Implementasi openFileChooser di Android 4.0.4
Kelas UploadHandler di Android 4.0.4
sumber
2019: Kode ini berfungsi untuk saya (Diuji pada Android 5 - 9).
Semoga bisa membantu Anda.
sumber
Menemukan SOLUSI yang berfungsi untuk saya! Tambahkan satu aturan lagi di file
proguard-android.txt
:sumber
Solusi Kotlin untuk Android 8:
Konstanta:
Penyiapan WebView:
Dan bagian onAcrtivityResult:
Tolong, perhatikan bahwa variabel maksud kami disebut "data".
sumber
Sudahkah Anda mengunjungi tautan ini? 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/
Contoh singkat dari pengunggahan file melalui Java lib Apache Commons
saya pikir Anda akan mendapat bantuan dari ini
sumber
Di KitKat Anda dapat menggunakan Kerangka Akses Akses.
Kerangka Akses Penyimpanan / Menulis Aplikasi Klien
sumber
Webview - Pilih file Tunggal & Banyak
Anda perlu dua menit untuk menerapkan kode ini:
build.gradle
kode java:
sumber
Saya baru di Andriod dan berjuang dengan ini juga. Menurut Panduan Referensi Google WebView.
Kode contoh saya dieksekusi di MainActvity.java.
Dikecualikan
sumber
Saya meneliti masalah ini selama hampir satu bulan. Semuanya gagal. Semua kode yang terlihat di beberapa situs web tidak berfungsi dengan baik. Tapi di sini ada solusi terbaik
https://github.com/chiclaim/android-webview-upload-file
Langkah
1) Klik klon atau unduh
2) Dapatkan zip fle di direktori lokal Anda
3) unzip file zip
4) Buka studio Android
5) File Goto ----> Buka ---> Navigasikan ke direktori tempat Anda membuka ritsleting konten.
6) Ubah url web yang diperlukan di webView.loadUrl ("your url hre"); di MainActivity.java
7) Bekerja dengan baik dengan versi Android studio 3.4.2
sumber