Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Программирование Android

Войти
Регистрация
Восстановить пароль
 
vkiper
16 / 16 / 6
Регистрация: 11.11.2015
Сообщений: 48
#1

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

28.08.2016, 18:18. Просмотров 340. Ответов 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/questions/5907369/file-upload-in-webview
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.08.2016, 18:18
Здравствуйте! Я подобрал для вас темы с ответами на вопрос WebView - не открывается FilePicker по нажатию кнопки (Программирование Android):

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

Условие открытия WebView при нажатии на разные кнопки - Программирование Android
Такое условие. Есть два Activity (MainActivity и WebViewActivity). В MainActivity две кнопки. При нажатии на первую кнопку должен появиться...

По нажатию не открывается МЕНЮ - Программирование Android
Почему может не срабатывает openOptionsMenu ? А кнопка &quot;меню&quot; устройства работает... package sлджтл; import...

Авторизация по нажатию кнопки - Программирование Android
Привет всем! В Android Studio создаю приложение с Login Activity. Там есть кнопка для отправки введенных емейл и пароль. хочу...

Выключение экрана по нажатию кнопки - Программирование Android
Необходимо выключить экран по нажатию кнопки. Пробовал KeyguardManager, но метод KeyguardLock зачеркивается в android studio. Пробовал...

Вызов телефона, по нажатию кнопки - Программирование Android
Уважаемые, подскажите, как осуществить вызов приложения &quot;Телефон&quot; что бы переходил в раздел клавиатуры, и был введен нужный номер по...

2
vkiper
16 / 16 / 6
Регистрация: 11.11.2015
Сообщений: 48
11.09.2016, 13:17  [ТС] #2
Увы, у темы есть продолжение. Потому что теперь часть разделов недоступна, точнее, доступна только для просмотра.
Я научился вызывать джинна, т.е. окно FilePicker, но прикол в том, что файлы из некоторых разделов невозможно выбрать, они как бы находятся в состоянии "disabled".
Поясню с помощью фотки:
WebView - не открывается FilePicker по нажатию кнопки
Мы имеем условно две основных секции, в верхней секции файлы НЕ доступны, в нижней вполне доступны. Заходим, например, в 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
vkiper
16 / 16 / 6
Регистрация: 11.11.2015
Сообщений: 48
12.09.2016, 12:21  [ТС] #3
Снова разобрался сам, изрядно погуглив.
Оказывается, вот так нельзя:
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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.09.2016, 12:21
Привет! Вот еще темы с ответами:

Закрыть активити по нажатию кнопки - Программирование Android
Есть код Куда прописать код чтобы я после нажатие кноки отправил данные и вернулся на MainActivity.class p.s. данные отправляет...

Воспроизвести звук по нажатию кнопки - Программирование Android
Добрый день! Используя пример, написал приложение, которое по нажатию на кнопку воспроизводит определённый звук. Но загвоздка в том,...

Смена фото по нажатию кнопки - Программирование Android
Здравствуйте. Я изучаю програмирование Android не очень давно. Хочу Сделать приложение, которое меняет фото по нажатию кнопки. Как это...

Очистка StringBuilder по нажатию кнопки - Программирование Android
Добрый день, подскажите как полностью очистить StringBuilder по нажатию кнопки. // очистка public void cleanClick(View arg0)...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru