Включить средство выбора файлов в Android WebView - PullRequest
0 голосов
/ 03 августа 2020

Я разрабатываю собственное приложение Android, и мой бизнес должен работать с инструментом обратной связи, таким как веб-сайт Survey Monkey. У него есть возможность прикреплять / загружать файлы. Если я открою этот URL-адрес в браузере, используя context?.startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(feedbackUrl))), пользователи смогут загружать файлы и оставлять отзывы. Но это открывает браузер за пределами приложения.

Итак, я визуализировал URL-адрес внутри веб-просмотра. Но при использовании веб-просмотра кнопки, которые должны открывать средство выбора файлов, не работали. Похоже, что никаких действий по этому поводу нет. Пытался установить дополнительные настройки для клиента веб-просмотра.

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        viewModel.isProgress.set(true)
        loadUrl()
    }

    private fun loadUrl() {
        val webview = binding.webview
        webview.webViewClient = RJBrowser()
        webview.webChromeClient = RJChromeBrowser()
        webview.settings.loadsImagesAutomatically = true
        webview.settings.javaScriptEnabled = true
        webview.scrollBarStyle = View.SCROLLBARS_INSIDE_OVERLAY

        val settings = webview.settings
        settings.setAppCacheEnabled(true)
        settings.cacheMode = WebSettings.LOAD_DEFAULT
        settings.useWideViewPort = true
        settings.loadWithOverviewMode = true
        settings.javaScriptCanOpenWindowsAutomatically = true
        settings.mediaPlaybackRequiresUserGesture = false


        // More optional settings, you can enable it by yourself
        settings.domStorageEnabled = true
        settings.setSupportMultipleWindows(true)
        settings.loadWithOverviewMode = true
        settings.allowContentAccess = true
        settings.setGeolocationEnabled(true)
        settings.allowUniversalAccessFromFileURLs = true

        settings.allowFileAccess = true

        // WebView settings
        webview.fitsSystemWindows = true
        webview.loadUrl(url)
    }



inner class RJBrowser : WebViewClient() {
    override fun shouldOverrideUrlLoading(view: WebView, url: String): Boolean {
        view.loadUrl(url)
        return true
    }

    override fun onPageFinished(view: WebView?, url: String?) {
        super.onPageFinished(view, url)
        viewModel.isProgress.set(false)

    }
}
inner class RJChromeBrowser  :WebChromeClient(){
        override fun onProgressChanged(view: WebView?, newProgress: Int) {
            super.onProgressChanged(view, newProgress)
        }

        override fun onShowFileChooser(
            webView: WebView?,
            filePathCallback: ValueCallback<Array<Uri>>?,
            fileChooserParams: FileChooserParams?
        ): Boolean {
            return super.onShowFileChooser(webView, filePathCallback, fileChooserParams)
        }
    }

Когда я поискал по inte rnet, я нашел пример обработки выбора / загрузки файлов на мобильной стороне. Скорее, я хочу, чтобы эти параметры были включены, чтобы веб-приложение Survey Monkey позаботилось обо всем остальном. Ищем предложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...