我偶然发现了一个一直困扰我的问题。我正在编写一个在外部存储上创建 mp3 文件的应用程序。问题是,如果我手动转到手机上创建的目录并删除该文件,每当我尝试创建相同的文件时,它都会抛出此错误:
java.io.FileNotFoundException:/storage/emulated/0/Ringtones/sound1.mp3:打开失败:EEXIST(文件存在)
选择要创建的其他声音效果很好,但在我手动删除它们后,由于该问题,它们无法再次创建。
我已经尝试在指示路径之后和 FileOutputStream 之前删除文件,但没有成功。
有什么建议吗? 干杯。
在尝试创建同一文件的另一个副本之前,您需要确认媒体数据库。所以你需要在复制之前调用这个:
sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(folder path in which your file was)));
编辑:以上答案已已弃用!请使用以下方法:
File file = new File(outputPath + fileName);
String filePath = file.toString();
String mimeType = "video/mp4";
MediaScannerConnection.scanFile(this, new String[]{filePath}, new String[]{mimeType}, null);
outputPath
和fileName
示例:
String outputPath = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM), "My App Name") + "/";
String fileName = "break dance" + ".mp4";
因此
File file
应该是您要更新的媒体的路径,因为它刚刚被删除或新添加,以便在图库中可见。
按照用户 blackapps 的提示找到了答案。我还更改了目录,因为我使用的是已弃用的参考。现在它可以按 sdk 30 的预期工作。
我也遇到了同样的问题,请问还有其他解决办法吗? 谢谢你