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

通过Storage Access Framework创建的JPEG在Android11文件应用显示0字节异常

问题根因

文件大小显示0B的问题由Android 11的DocumentsProvider元数据缓存机制导致,现有写入逻辑本身没有功能错误:

  • 通过SAF调用createFile()创建文件时,系统DocumentsProvider会初始化文件元数据,默认将大小标记为0
  • 原生层直接对文件描述符执行write()、close()操作的过程,不会主动触发DocumentsProvider更新缓存的元数据
  • Android 11自带的「文件」应用优先读取DocumentsProvider缓存的元数据展示文件大小,不会实时读取文件实际内容统计大小,因此会显示0B
  • 打开文件、生成缩略图的操作会直接读取文件实际内容,因此功能表现正常
修复方案

只需在原生层写入完成、关闭文件描述符之后,增加元数据同步操作即可,可选方案如下:

  • 主动通知系统内容变更:调用getContentResolver().notifyChange(fileUri, null),其中fileUri为创建文件时DocumentFile.getUri()的返回值,该操作会触发DocumentsProvider刷新对应文件的元数据缓存
  • 主动更新文件元信息:调用DocumentsContract.updateDocument()手动传入文件实际大小,更新系统记录的元数据
  • 如果文件存储在公共媒体目录,可触发系统媒体扫描,将文件信息同步到MediaStore,同时会更新DocumentsProvider的缓存

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 00:54:03