从contentResolver中删除文件只删除数据库中的条目(不是文件)

时间:2013-01-15 00:08:17

标签: android android-contentresolver mediastore

我尝试使用contentResolver删除文件,但只删除数据库中的条目,而不是真实文件。所以我尝试首先删除条目,然后删除文件:

int rows = context.getContentResolver().delete(
MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
MediaStore.Audio.Media._ID + "=" + idSong, null);

// Remove file from card
if (rows != 0) {
Uri uri = ContentUris.withAppendedId(
        MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, idSong);
File f = new File(uri.getPath());
if(!f.delete())
    Log.d("fail-2", "fail-2");  
}
else
Log.d("fail-1", "fail-1");

...输出为“fail-2”。为什么呢?

为什么ContentResolver不会删除真实文件?这是正常的吗?

3 个答案:

答案 0 :(得分:1)

这是有效的:

    // Remove entry from database
    int rows = context.getContentResolver().delete(
            MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
            MediaStore.Audio.Media._ID + "=" + idSong, null);

    // Remove file from card
    if (rows != 0) {
        try {
            File f = new File(path);
            if (f.delete())
                return true;
        } catch (Exception e) {
            Log.d("MusicDB", "file: '" + path
                    + "' couldn't be deleted", e);
            return false;
        }
    }
    return false;

但是为什么contentResolver不删除文件??

答案 1 :(得分:0)

似乎在4.2中,它将文件归零,但不删除它。我实际上希望它只是从MediaStore中删除它而不是从文件系统中删除它。无论哪种方式,这似乎是一个Android错误。

更新文件时遇到问题。我遇到的问题是媒体扫描程序没有删除重新扫描时的旧条目,因此最终会有两个条目。

答案 2 :(得分:0)

在科特林尝试这个

distribution