You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android 14 WebView onShowFileChooser回调始终返回Activity已取消求助

Android 14 Beta下WebView文件选择器返回取消状态的解决方案

以下是针对该问题的几种可行修复方案:

  • 添加Intent权限标记
    Android 14 Beta中,系统文件选择器可能需要明确的URI权限标记才能正常返回结果。修改onShowFileChooser中启动Intent的代码,补充读取和写入权限标记:

    inner class ChromeClient : WebChromeClient() {
        override fun onShowFileChooser(
          webView: WebView,
          filePathCallback: ValueCallback<Array<Uri>>,
          fileChooserParams: FileChooserParams
        ): Boolean {
          Log.i("info", "CALLED ONSHOWFILECHOOSER")
          fileCallback = filePathCallback
          val intent = fileChooserParams.createIntent()
          // 添加权限标记
          intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
          intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION)
          fileSelectorCallback.launch(intent)
          return true
        }
      }
    
  • 替换为专用ActivityResult合约
    放弃通用的StartActivityForResult合约,改用针对文件选择的专用合约,适配Android 14的行为逻辑:

    // 替换原有的fileSelectorCallback
    private val fileSelectorCallback = registerForActivityResult(ActivityResultContracts.GetMultipleContents("*/*")) { uris ->
      fileCallback?.let { cb ->
        fileCallback = null
        cb.onReceiveValue(if (uris.isEmpty()) null else uris.toTypedArray())
      }
    }
    
    inner class ChromeClient : WebChromeClient() {
      override fun onShowFileChooser(
        webView: WebView,
        filePathCallback: ValueCallback<Array<Uri>>,
        fileChooserParams: FileChooserParams
      ): Boolean {
        Log.i("info", "CALLED ONSHOWFILECHOOSER")
        fileCallback = filePathCallback
        // 根据文件选择参数动态设置类型
        val acceptType = fileChooserParams.acceptTypes.firstOrNull() ?: "*/*"
        fileSelectorCallback.launch(acceptType)
        return true
      }
    }
    
  • 检查Activity启动模式
    若你的WebView所属Activity使用了singleInstance或singleTask启动模式,Android 14 Beta中可能会导致文件选择器返回结果异常。修改AndroidManifest.xml中对应Activity的启动模式:

    <activity
      android:name=".YourWebViewActivity"
      android:launchMode="standard">
      <!-- 其他配置项 -->
    </activity>
    
  • 更新WebView版本
    Android 14 Beta可能存在WebView相关的兼容性bug,尝试将Android System WebView更新至最新稳定版或Beta版,查看是否已修复该问题。

内容的提问来源于stack exchange,提问作者Tanishq

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 14:47:47