首页 > 解决方案 > 处理文件选择器 android WebViews

问题描述

图片

我有一个问题,伙计们。我有一个webView应用程序。应用程序内部是一个按钮,应该允许用户从设备中选择文件并上传到 api。一切都通过网络处理。问题是在webView应用程序上,点击按钮时,什么也没有发生,但是,当我尝试使用 chrome 浏览器或浏览器应用程序时,它运行良好。

我需要做些什么来确保它与 chrome 浏览器的工作方式相同?我不想在本地处理这个功能,因为这是我在网上看到的唯一解决方案。无论如何我都试过这样做,但它不会像这张图片那样弹出那些文件选项

有没有更简单的方法来处理这个?

标签: androidwebview

解决方案


尝试这个:

private var filePathCallback: ValueCallback<Array<Uri>>? = null

override fun onCreate(savedInstanceState: Bundle?) {
        webView.webChromeClient = object: WebChromeClient() {
            override fun onShowFileChooser(webView: WebView?, filePathCallback: ValueCallback<Array<Uri>>?, fileChooserParams: FileChooserParams?): Boolean {
                startActivityForResult(fileChooserParams?.createIntent(), CHOOSE_FILE_REQUEST_CODE)
                this@MainActivity.filePathCallback = filePathCallback
                return true
            }
        }
    }

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
        when (requestCode) {
            CHOOSE_FILE_REQUEST_CODE -> {
                if (resultCode == Activity.RESULT_OK) {
                    filePathCallback?.onReceiveValue(WebChromeClient.FileChooserParams.parseResult(resultCode, data))
                    filePathCallback = null
                }
            }
        }
    }

推荐阅读