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

2021年Kotlin开发Android应用如何实现WebView多文件上传?

问题排查与修复方案

你的代码存在4个核心问题,按优先级修改即可实现高版本Android的多图上传:

  1. onCreate 加载地址笔误
    你在onCreate中调用loadUrl(appLinkUrl, ""),但appLinkUrl仅在深链跳转的handleIntent方法中定义,首次启动加载的变量应该是你之前赋值的pageUrl,修改为:
loadUrl(pageUrl, "")
  1. onShowFileChooser 未使用选择器包装
    高版本的文件选择Intent必须用Intent.createChooser包装,否则部分系统原生选择器不会触发多选能力,同时不要随意覆盖fileChooserParams生成的Intent配置,除非你明确要限制仅上传图片,修改后的方法代码:
override fun onShowFileChooser(webView: WebView?, filePathCallback: ValueCallback<Array<Uri>>?, fileChooserParams: FileChooserParams?): Boolean {
    uploadMessage?.onReceiveValue(null)
    uploadMessage = filePathCallback

    val intent = fileChooserParams!!.createIntent()
    // 匹配网页的multiple属性自动开启多选,也可以强制写true固定支持多选
    if (fileChooserParams.isMultipleSelectionAllowed) {
        intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true)
    }
    // 仅在需要强制限制只能上传图片时保留下面两行,否则删除
    intent.type = "image/*"
    intent.addCategory(Intent.CATEGORY_OPENABLE)
    try {
        // 必须包装选择器,否则部分系统不支持多选
        startActivityForResult(Intent.createChooser(intent, "选择图片"), REQUEST_SELECT_FILE)
        return true
    } catch (e: ActivityNotFoundException) {
        uploadMessage?.onReceiveValue(null)
        uploadMessage = null
        Toast.makeText(applicationContext, "无法打开文件选择器", Toast.LENGTH_LONG).show()
        return false
    }
}
  1. 低版本onActivityResult取错Intent
    低版本分支你取的是当前Activity的intent,不是文件选择返回的data参数,修改对应代码:
} else if (requestCode == FILECHOOSER_RESULTCODE) {
    if (null == mUploadMessage)
        return
    // 把原来的intent换成参数传入的data
    val result = if (data == null || resultCode != RESULT_OK) null else data.data
    mUploadMessage?.onReceiveValue(result)
    mUploadMessage = null
}
  1. 缺少动态存储权限申请
    Android 6.0及以上需要动态申请存储权限才能正常读取选中的图片:
  • Android 13及以上申请 Manifest.permission.READ_MEDIA_IMAGES
  • Android 12及以下申请 Manifest.permission.READ_EXTERNAL_STORAGE
    权限申请通过后再使用WebView加载页面即可。

注:旧版本Android(5.0以下)本身系统不支持多文件上传,无需额外适配,符合你的兼容要求。如果部分国产定制系统测试仍无法多选,可安装谷歌官方文件管理器Files测试,排除系统自带选择器不支持多选的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 10:21:01