Kotlin WebView Загрузка файла - PullRequest
       7

Kotlin WebView Загрузка файла

0 голосов
/ 20 сентября 2019

Здесь есть несколько таких же вопросов о переполнении стека, но без ответа, и если да, то это на Java, а не на Kotlin.

У меня есть простое приложение WebView, написанное на Kotlin, которое открывает мое веб-приложение.Все хорошо, но у меня проблема с загрузкой файлов через форму HTML.Я понял, как открыть FileChooser, но когда я выбираю файл, ввод по-прежнему не имеет значения.

У вас когда-нибудь была такая же проблема?

Ниже мой код:

override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(activity_main)

        webView.setWebViewClient(WebViewClient())
        webView.settings.javaScriptEnabled = true
        webView.settings.allowFileAccess = true
        webView.settings.allowFileAccessFromFileURLs = true
        webView.settings.setAllowFileAccess(true)
        webView.settings.setAllowContentAccess(true)
        webView.settings.setGeolocationEnabled(true)
        webView.fitsSystemWindows = true
        webView.settings.domStorageEnabled = true
        webView.settings.setSupportMultipleWindows(true)
        webView.settings.loadWithOverviewMode = true
        webView.settings.allowContentAccess = true
        webView.settings.setGeolocationEnabled(true)

        webView.webChromeClient = (object:WebChromeClient() {
            override fun onGeolocationPermissionsShowPrompt(origin: String?, callback: GeolocationPermissions.Callback?) {
                callback!!.invoke(origin, true, false)
            }

            // onShowFileChooser
            override fun onShowFileChooser(view: WebView, filePathCallback:ValueCallback<Array<Uri>>, fileChooserParams:FileChooserParams):Boolean {
                val intent = Intent(Intent.ACTION_GET_CONTENT)
                intent.addCategory(Intent.CATEGORY_OPENABLE)
                intent.setType("image/*")
                val PICKFILE_REQUEST_CODE = 100
                startActivityForResult(intent, PICKFILE_REQUEST_CODE)
                return false
            }
        })

        webView.settings.setRenderPriority(WebSettings.RenderPriority.HIGH)
        webView.settings.cacheMode = WebSettings.LOAD_NO_CACHE
        if (Build.VERSION.SDK_INT >= 19) {
            webView.setLayerType(View.LAYER_TYPE_HARDWARE, null)
        } else {
            webView.setLayerType(View.LAYER_TYPE_SOFTWARE, null)
        }
...