Я изо всех сил пытался загрузить файлы из WebView с последних нескольких дней, и никакого прогресса нет. Я гуглил и реализовал все предложенные решения, но ни одно не работает, например: решения, предложенные здесь и так далее.
Проблема: у меня есть HTML-страница со следующим кодом для загрузки файла. Он отлично работает в настольном браузере, таком как Firefox, и во встроенном браузере эмулятора / AVD, т.е. когда я нажимаю кнопку «Обзор ...», отображаемую элементом, браузер открывает диалоговое окно, в котором я могу выбрать файл для загрузки.
Однако в эмуляторе Android 3.0 / AVD, когда я нажимаю «Выбрать файл», ничего не происходит, ни один файл не открывается !!!
<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>
Может ли кто-нибудь предложить возможное решение в ближайшее время.
android
android-emulator
webview
user741148
источник
источник
Webview
подкласс, который обрабатывает загрузку файлов и т. Д. Автоматически: github.com/delight-im/Android-AdvancedWebViewAdvancedWebView.isFileUploadAvailable()
, поддерживаются ли загрузки. И вы можете поделиться своим кодом и попросить помощи в вопросах: github.com/delight-im/Android-AdvancedWebView/issuesОтветы:
Это полное решение для всех версий Android, мне тоже было трудно с этим.
Также я хочу добавить, что «страница загрузки», подобная той, что в этом примере, не будет работать в <4 версиях, так как она имеет функцию предварительного просмотра изображения, если вы хотите, чтобы она работала, используйте простую загрузку php без предварительного просмотра.
Обновить :
Пожалуйста, найдите решение для устройств леденец здесь и спасибо за изможденное лицо
Обновление 2 :
Полное решение для всех устройств Android до Oreo здесь, и это более продвинутая версия , вы должны изучить его, может быть, это может помочь.
источник
progressBar
Кажется неиспользованными там. Я вижу только его сокрытие, но не там, где оно активировано. Я думаю, вам нужно добавитьonProgressChanged(...)
в пользовательскийWebChromeClient
вариант для этого. (И что-то вродеgetWindow().setFeatureInt( Window.FEATURE_PROGRESS, Window.PROGRESS_VISIBILITY_ON);
вonCreate
.)Рабочий метод от HONEYCOMB (API 11) до Oreo (API 27)
[Не тестировалось на Pie 9.0]
модифицированный
onActivityResult()
Теперь вставьте
onCreate()
илиonCreateView()
вставьте следующий кодисточник
это единственное решение, которое я нашел, которое работает!
источник
В 5.0 Lollipop Google добавил официальный метод, WebChromeClient.onShowFileChooser . Они даже предоставляют способ автоматически генерировать намерение выбора файла так, чтобы он использовал ввод, принимает типы пантомимы.
Для версий Android до KitKat работают закрытые методы, упомянутые в других ответах. Я не нашел хорошего обходного пути для KitKat (4.4).
источник
uploadMessage.onReceiveValue()
работает и закрывается)
Я обнаружил, что мне нужно 3 определения интерфейса для обработки различных версий Android.
источник
Это решение также работает для Honeycomb и Ice Cream Sandwich. Похоже, Google представил новую замечательную функцию (атрибут accept) и забыл реализовать перегрузку для обратной совместимости.
источник
Полное решение Hifarrer очень полезно для меня.
но я столкнулся со многими другими проблемами - поддержка другого типа пантомимы, перечисление устройств захвата (камера, видео, аудио-перекодировщик), немедленное открытие устройства захвата (например: <input accept = "image / *; capture">) ...
Итак, я сделал решение, которое работает точно так же, как приложение по умолчанию для веб-браузера
Я использовал android-4.4.3_r1 / src / com / android / browser / UploadHandler.java. (спасибо Руперту Роунсли)
дополнительное восстановление строки из res / values / string.xml:
Если вы используете proguard, вам может потребоваться опция ниже в proguard-project.txt:
ОБНОВЛЕНИЕ № 1 (2015.09.09)
добавляет код для совместимости Android 5.0.1.
источник
Это работа для меня. Также работайте на нугу и зефир [ [
источник
Я нашел необходимым определить
public void openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType, String capture)
, в Android 4.1. Затем я последовал решению Мишеля Оливье.источник
Мне действительно удалось заставить средство выбора файлов появиться в Kitkat, выбрать изображение и получить путь к файлу в результате действия, но единственное, что я не могу «исправить» (вызвать этот обходной путь), это заставить входной файл заполнить, чтобы заполнить с данными файла.
Кто-нибудь знает, как получить доступ к полю ввода из деятельности? Использую этот пример комментария . Это просто последний кусок, последний кирпич в стене, который мне просто нужно положить в нужное место (хотя я мог бы инициировать загрузку файла изображения прямо из кода.
ОБНОВЛЕНИЕ № 1
Я не хардкорный Android-разработчик, поэтому я покажу код на уровне новичка. Я создаю новую активность в уже существующей активности
Часть манифеста
Создаю свой класс BrowseActivity из этого примера ответа . Экземпляр WebChromeClient () в основном выглядит одинаково, за исключением последней части, запускающей часть пользовательского интерфейса средства выбора ...
И еще кое-что
}
Наконец, еще немного кода для получения фактического пути к файлу, код, найденный в SO, я также добавил URL-адрес поста в комментариях, чтобы автор получил кредиты за свою работу.
Наконец, HTML-страница должна запускать этот новый метод showPicker (в частности, на A4.4)
источник
Собственный браузер Google предлагает такое комплексное решение этой проблемы, что гарантирует свой собственный класс:
Реализация openFileChooser в Android 4.0.4
Класс UploadHandler в Android 4.0.4
источник
2019: этот код работал для меня (проверено на Android 5 - 9).
Надежда может помочь вам.
источник
Нашел РЕШЕНИЕ, которое работает на меня! Добавьте еще одно правило в файл
proguard-android.txt
:источник
Решение Kotlin для Android 8:
Константы:
Настройка WebView:
И часть onAcrtivityResult:
Пожалуйста, обратите внимание, что наша переменная намерения называется «data».
источник
Вы посетили эту ссылку? 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/
Краткий пример загрузки файла через Java lib Apache Commons
я думаю, что вы получите помощь от этого
источник
В KitKat вы можете использовать Storage Access Framework.
Framework Access Access / Написание клиентского приложения
источник
Webview - выбор одного и нескольких файлов
вам нужно две минуты для реализации этого кода:
build.gradle
код Java:
источник
Я новичок в Andriod и боролся с этим также. Согласно справочному руководству Google WebView.
Пример кода я выполнил в MainActvity.java.
Excuted
источник
Я занимался этим вопросом почти месяц. Все не удалось. Все коды, видимые на нескольких сайтах, не работают хорошо. Но здесь существует лучшее решение
https://github.com/chiclaim/android-webview-upload-file
меры
1) Нажмите на клон или скачать
2) Получите почтовый индекс в вашем местном каталоге
3) распаковать архив
4) Откройте Android-студию
5) Перейти к файлу ----> Открыть ---> Перейдите в каталог, в который вы распаковали содержимое.
6) Измените необходимый веб-URL в webView.loadUrl («ваш URL-адрес»); в MainActivity.java
7) Хорошо работает с версией Android studio 3.4.2
источник