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

Android WebView onShowFileChooser选择文件后结果不显示问题求助

WebView 文件选择后 HTML Input 不显示选中结果的解决办法

问题核心在于手动构建的文件选择逻辑未匹配WebView的标准要求:一是自定义GetContent Intent缺少WebView需要的参数,二是返回的Content URI未授予WebView访问权限,导致WebView无法读取文件元数据,最终无法在HTML输入框中展示选中状态。

修正方案

  1. 使用WebView原生FileChooserParams生成Intent
    放弃手动创建GetContent Intent,改用FileChooserParams.createIntent()生成符合WebView规范的请求,它会自动适配HTML input的文件类型、多选设置等参数。

  2. 授予WebView URI临时访问权限
    在Intent中添加FLAG_GRANT_READ_URI_PERMISSION,确保WebView能读取选中文件的内容。

  3. 用FileChooserParams.parseResult解析结果
    不要手动构建Uri数组,通过WebView提供的解析方法生成标准结果,避免格式不匹配问题。

修改后的代码示例

重写onShowFileChooser方法

@Override
public boolean onShowFileChooser(WebView webView,
                                 ValueCallback<Uri[]> filePathCallback,
                                 FileChooserParams fileChooserParams) {
    browserFragment.filePathCallback = filePathCallback;
    browserFragment.fileChooserParams = fileChooserParams;
    
    // 基于WebView的参数生成标准Intent
    Intent intent = fileChooserParams.createIntent();
    // 添加临时读取权限
    intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
    browserFragment.filePicker.launch(intent);
    return true;
}

重新实现文件选择器的注册与回调

// 改用StartActivityForResult处理Intent返回结果
ActivityResultContracts.StartActivityForResult contract = new ActivityResultContracts.StartActivityForResult();
ActivityResultCallback<ActivityResult> callback = result -> {
    if (browserFragment.filePathCallback == null) return;
    
    // 用WebView原生方法解析结果,生成标准Uri数组
    Uri[] results = FileChooserParams.parseResult(result.getResultCode(), result.getData());
    browserFragment.filePathCallback.onReceiveValue(results);
    // 回调后清空引用,避免内存泄漏
    browserFragment.filePathCallback = null;
};
filePicker = registerForActivityResult(contract, callback);

关键说明

  • FileChooserParams是WebView为文件选择场景提供的标准工具类,能保证Intent参数和结果解析完全适配WebView的逻辑,避免手动实现的偏差。
  • 授予临时权限后,WebView才能读取Content URI对应的文件信息,进而在HTML输入框中展示文件名等选中状态。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 11:45:30