文件重命名成功但MediaStore返回原名,第三方播放器可识别?求替代方案
问题核心
直接通过File.renameTo()修改文件名后,MediaStore的数据库不会自动实时同步,所以你的查询会返回旧名称;第三方播放器能识别新名字,要么是它直接读取文件系统的真实文件名、不依赖MediaStore缓存,要么是它触发了系统媒体扫描,或者系统后台已完成扫描更新。
替代实现方案
方案1:触发系统媒体扫描器自动更新MediaStore
无需手动修改MediaStore数据库,调用系统媒体扫描器扫描重命名后的文件,系统会自动同步更新MediaStore的记录。示例代码:
File renamedFile = new File(file.getParent(), "video.mkv"); // 触发媒体扫描 MediaScannerConnection.scanFile( context, new String[]{renamedFile.getAbsolutePath()}, new String[]{"video/x-matroska"}, // 对应MKV的MIME类型,可根据文件类型调整 new MediaScannerConnection.OnScanCompletedListener() { @Override public void onScanCompleted(String path, Uri uri) { // 扫描完成后,MediaStore的记录已更新 } } );
方案2:查询时直接读取文件系统的真实文件名
如果不需要依赖MediaStore的DISPLAY_NAME字段,在拿到MediaStore返回的文件路径后,直接通过File对象获取最新文件名:
// 从MediaStore查询获取文件路径 String filePath = cursor.getString(cursor.getColumnIndex(MediaStore.Files.FileColumns.DATA)); File videoFile = new File(filePath); String actualFileName = videoFile.getName(); // 此处得到的是重命名后的真实文件名
补充说明
第三方播放器的识别逻辑通常是直接遍历文件目录读取真实文件名,而非完全依赖MediaStore的缓存数据;部分应用在通过ContentResolver访问文件时,也会间接触发系统的媒体扫描操作,从而同步到最新的文件信息。
内容的提问来源于stack exchange,提问作者Yash
相关产品推荐
相关产品推荐

