Android 清除存储后,已删除的文件仍显示在我的应用程序中
我正在提取音频文件并显示在recyclerview中。 我在按下“删除”按钮后提供了“删除”选项,文件将从列表和文件管理器中删除,但当我重新打开应用程序时,音频文件将再次出现在“回收器”视图中的同一位置,但不会播放 但当我重新检查文件管理器时,文件不在那里,然后我清除了缓存和存储,但文件仍然在那里。 因此,我重新安装了应用程序,但该文件仍然存在,但您无法播放它 如果你直接从文件管理器中删除该文件,该文件不会立即出现在应用程序中Android 清除存储后,已删除的文件仍显示在我的应用程序中,android,android-studio,kotlin,android-recyclerview,Android,Android Studio,Kotlin,Android Recyclerview,我正在提取音频文件并显示在recyclerview中。 我在按下“删除”按钮后提供了“删除”选项,文件将从列表和文件管理器中删除,但当我重新打开应用程序时,音频文件将再次出现在“回收器”视图中的同一位置,但不会播放 但当我重新检查文件管理器时,文件不在那里,然后我清除了缓存和存储,但文件仍然在那里。 因此,我重新安装了应用程序,但该文件仍然存在,但您无法播放它 如果你直接从文件管理器中删除该文件,该文件不会立即出现在应用程序中 val uri = Uri.parse(getSongsList?.
val uri = Uri.parse(getSongsList?.get(item.groupId)?.songData)
val fdelete = File(uri.path)
if (fdelete.exists()) {
Log.e("v", "fscsg")
if (fdelete.delete()) {
Log.e("vdv", "fg")
System.out.println("file Deleted :${uri.path}")
} else {
Log.e("vd", "fgcs")
System.out.println("file not Deleted :${uri.path}")
}
}
Log.i("ld", getSongsList?.get(0)?.songTitle + " " + item.groupId)
getSongsList?.removeAt(item.groupId)
_mainScreenAdapter?.notifyDataSetChanged()
所以,当文件不在存储中时,它仍然出现在应用程序中,这怎么可能呢。我得到了答案,这非常令人沮丧。 有一个媒体数据库,它保存有关媒体文件的所有信息,因此当我删除该文件时,它会被删除,但在媒体数据库中仍有记录,而内容解析器会从媒体数据库中获取数据,因此它就存在于应用程序中。 因此,如果我们重新启动手机,那么删除的文件将从列表中消失,因此每次我们必须删除该文件时,我们也必须将其从数据库记录中删除
仍然在寻找如何从媒体数据库中删除。我得到的答案非常令人沮丧。
File file = new File(uriOfFile);
boolean deleted = file.delete();
//delete file from Media Database
scanaddedFile(file);
private void scanaddedFile(String path) {
try {
MediaScannerConnection.scanFile(context, new String[] { path },
null, new MediaScannerConnection.OnScanCompletedListener() {
public void onScanCompleted(String path, Uri uri) {
Log.i("ExternalStorage", "Scanned " + path + ":");
Log.i("ExternalStorage", "-> uri=" + uri);
context.getContentResolver()
.delete(uri, null, null);
}
});
} catch (Exception e) {
e.printStackTrace();
}
}
有一个媒体数据库,它保存有关媒体文件的所有信息,因此当我删除该文件时,它会被删除,但在媒体数据库中仍有记录,而内容解析器会从媒体数据库中获取数据,因此它就存在于应用程序中。
因此,如果我们重新启动手机,那么删除的文件将从列表中消失,因此每次我们必须删除该文件时,我们也必须将其从数据库记录中删除
仍在寻找如何从媒体数据库中删除
File file = new File(uriOfFile);
boolean deleted = file.delete();
//delete file from Media Database
scanaddedFile(file);
private void scanaddedFile(String path) {
try {
MediaScannerConnection.scanFile(context, new String[] { path },
null, new MediaScannerConnection.OnScanCompletedListener() {
public void onScanCompleted(String path, Uri uri) {
Log.i("ExternalStorage", "Scanned " + path + ":");
Log.i("ExternalStorage", "-> uri=" + uri);
context.getContentResolver()
.delete(uri, null, null);
}
});
} catch (Exception e) {
e.printStackTrace();
}
}