Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/13: Рейтинг темы: голосов - 13, средняя оценка - 4.92
17 / 17 / 6
Регистрация: 11.11.2015
Сообщений: 146

WebView - не открывается FilePicker по нажатию кнопки

28.08.2016, 18:18. Показов 2796. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем доброго времени суток.
Делаю аппликацию-оболочку для одного сайта. Сделал все как доктор прописал, благо в сети информации полно.
Проверил на своем мобильнике, приложение устанавливается, работает, отображает сайт, даже умеет поворачиваться вместе с мобильником.
Все ссылки ведут себя как надо, я их фильтрую, релевантные отображаем в моем приложении, нерелевантные - во внешнем(дефолтном) браузере.
Заминка произошла на простой кнопке, которая по клику на нее должна открывать FilePicker (File Chooser и т.д.), для того чтобы юзер выбрал файл и загрузил его с мобильника на сайт.
Когда я захожу на сайт через обычный браузер, кнопка работает отлично, поднимает диалог FilePicker и т.д. Но когда я запускаю мое приложение с этим сайтом, то кнопка просто не реагирует.
Я начал грешить в сторону permissions, добавил в манифест кучу мусора типа:
XML
1
2
3
4
5
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.MANAGE_DOCUMENTS"/>
В коде разрешил все что нужно и не нужно:
Java
1
2
3
4
5
6
7
8
9
10
        String url = "http://my-site.com";
        WebView myView = (WebView)this.findViewById(R.id.webView1);
        WebSettings settings = myView.getSettings();
        settings.setJavaScriptEnabled(true);
        settings.setJavaScriptCanOpenWindowsAutomatically(true);
        settings.setLoadsImagesAutomatically(true);
        settings.setAllowContentAccess(true);
        settings.setAllowFileAccess(true);
        myView.setWebViewClient(new MyWebViewClient()); //for internal-navigation only
        myView.loadUrl(url);
Ничего не помогает. За самой кнопкой стоит простой JS, типа $('#browse_file').click(). Все стандартно.
Кстати, данный вопрос уже поднимался (Закгрузить файл в WebView), но разумного ответа не было, увы.
Может, кто сталкивался с подобными граблями?

ЗЫ: в теме новичок, прошу простить за левые вопросы, если таковые имеются.

Добавлено через 1 час 45 минут
Нашел ответ вот здесь, может кому пригодится:
http://stackoverflow.com/quest... in-webview
1
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
28.08.2016, 18:18
Ответы с готовыми решениями:

По нажатию кнопки не открывается другая форма
import sys from PyQt5 import uic from PyQt5.QtWidgets import QApplication, QWidget, QMainWindow, QPushButton from PyQt5.QtWidgets...

Добавление текстбоксов по нажатию клавиши и удаление по нажатию другой кнопки
Всем доброго времени суток. Хотел попросить помощи в написании следующего кода. Кое что набросал, но не работает при удалении...

Разбить строку на слова по нажатию первой кнопки, отсортировать список слов по нажатию второй
Разбить строку, введённую в первую ячейку первого столбца активного листа, на слова, и вывести их в ячейки первого столбца, начиная со...

2
17 / 17 / 6
Регистрация: 11.11.2015
Сообщений: 146
11.09.2016, 13:17  [ТС]
Увы, у темы есть продолжение. Потому что теперь часть разделов недоступна, точнее, доступна только для просмотра.
Я научился вызывать джинна, т.е. окно FilePicker, но прикол в том, что файлы из некоторых разделов невозможно выбрать, они как бы находятся в состоянии "disabled".
Поясню с помощью фотки:

Мы имеем условно две основных секции, в верхней секции файлы НЕ доступны, в нижней вполне доступны. Заходим, например, в Google Drive, видим там мои картинки(заблаговременно закинул туда несколько штук), но картинки не-кликабельные и имеют соответствующую "disabled" подсветку.
Теперь заходим в Gallery(или YandexDisk), там все доступно и работает как надо. Интересный момент еще заключается в том, что я могу открыть свой архив фотографий либо через "Images" либо через "Gallery". Так вот, в первом случае фотки не-кликабельные, во втором - кликабельные. Может кто знает, в чем засада?
Вот так выглядит ф-я onShowFileChooser():
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
            // For Lollipop 5.0+ Devices
            @TargetApi(Build.VERSION_CODES.LOLLIPOP)
            public boolean onShowFileChooser(WebView mWebView, ValueCallback<Uri[]> filePathCallback, WebChromeClient.FileChooserParams fileChooserParams)
            {
                if (uploadMessage != null) {
                    uploadMessage.onReceiveValue(null);
                    uploadMessage = null;
                }
 
                uploadMessage = filePathCallback;
 
                Intent intent = fileChooserParams.createIntent();
 
                //little fix for 'type' argument ... because our intent already has prepared type, we need to add option for 'Gallery', and we do it by adding 'image/*'
                // [url]http://stackoverflow.com/questions/13065838/what-are-the-possible-intent-types-for-intent-settypetype[/url]
                intent.setType("image/*,application/pdf,application/vnd.ms-powerpoint,.jpg,.png,.ppt,.pptx*");
 
                try
                {
                    startActivityForResult(intent, REQUEST_SELECT_FILE);
                } catch (ActivityNotFoundException e)
                {
                    uploadMessage = null;
                    Toast.makeText(null, "Cannot Open File Chooser", Toast.LENGTH_LONG).show();
                    return false;
                }
                return true;
            }
Манифест и ф-я onCreate() приведены в начале темы, не буду их повторять.
Всем заранее 10х.
0
17 / 17 / 6
Регистрация: 11.11.2015
Сообщений: 146
12.09.2016, 12:21  [ТС]
Снова разобрался сам, изрядно погуглив.
Оказывается, вот так нельзя:
Java
1
intent.setType("image/*,application/pdf,application/vnd.ms-powerpoint,.jpg,.png,.ppt,.pptx*");
А можно вот так:
Java
1
2
3
                intent.setType("image/*");
                String[] mimetypes = {"application/pdf", "application/vnd.ms-powerpoint", "image/*" };
                intent.putExtra(Intent.EXTRA_MIME_TYPES, mimetypes);
Всем удачи!
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
12.09.2016, 12:21
Помогаю со студенческими работами здесь

Нарисовать домик по нажатию кнопки, и звезду по нажатию на форме
Нарисовать домик по нажатию кнопки и звезду по нажатию на форме

WebView, открывается браузер при переходе по ссылке
Возникла проблема такого рода, что в приложении WebView часто перекидывает пользователя в браузер смартфона. Какие есть варианты для...

Прорисовка в окне по нажатию кнопки(обработчик кнопки) MFC
Сообсвтенно вот какая пробелма. Создал кнопку, в ее обработчике написал, что по 2-ому нажатию левой кнопки, переменной bool drawing...

Изменить цвет кнопки (button) по нажатию кнопки
Здравствуйте, подскажите, пожалуйста, как сделать что когда нажимаешь на копку меняется цвет другой кнопки button5.Click += new...

Эмуляция нажатия левой кнопки мыши на QWebView (ui->webView)
QCursor::setPos(60,320); QMouseEvent mouseEvent(QEvent::MouseButtonPress,QCursor ::...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru