Android Media Scanner:如何删除文件?

时间:2011-12-05 00:15:39

标签: android android-mediascanner

我正在编写一个应用程序来删除可能会或可能不会列入任何一种媒体库(如音乐或图片)的文件。虽然我可以使用MediaScannerConnection.scanFile方法将添加文件添加到媒体库,但似乎没有任何调用通知服务该文件已被删除。向它发送不再存在的文件的路径也不会导致所需的行为。我该如何从Android存储中不再存在的库中删除项目?

5 个答案:

答案 0 :(得分:12)

我能够使用这两个问题中的点点滴滴将方法放在一起

  1. What is the String 'volumeName' argument of MediaStore.Audio.Playlists.Members.getContentUri referring to?
  2. How can I refresh MediaStore on Android?
  3. 基本上我只是按路径选择每个MediaStore类型(音频,视频和图像)运行查询并删除我找到的任何记录。

    public static void RemoveAllForPaths(String[] paths, Context context)
    {
        private static final String[] FIELDS = { MediaStore.MediaColumns._ID, MediaStore.MediaColumns.DATA, MediaStore.MediaColumns.TITLE };
        if(paths == null || paths.length == 0) return;
        String select = "";
        for(String path : paths)
        {
            if(!select.equals("")) select += " OR ";
            select += MediaStore.MediaColumns.DATA + "=?";
        }
    
        Uri uri;
        Cursor ca;
    
        uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
        ca = context.getContentResolver().query(uri, FIELDS, select, paths, null);
        for(ca.moveToFirst(); !ca.isAfterLast(); ca.moveToNext()){
            int id = ca.getInt(ca.getColumnIndex(MediaStore.MediaColumns._ID));
            uri = ContentUris.withAppendedId(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, id);
            context.getContentResolver().delete(uri, null, null);
        }
        ca.close();
    
        // More of the same just setting the URI to Video and Images
    }
    

    我不完全确定这是多么安全,但它是我迄今为止发现的唯一解决方案,并且一些初步测试似乎正在起作用。如果任何人有关于此方法的任何进一步信息或更好的方法来执行此功能,我邀请其他人提交其他答案。

答案 1 :(得分:8)

Spencer Ruport的答案是正确的,但您无需查询并打开光标即可删除。 因此,对于一个音乐文件文件,代码很简单:

public void DeleteMP3FromMediaStore( Context context, String path )
{
    Uri rootUri = MediaStore.Audio.Media.getContentUriForPath( path );

    context.getContentResolver().delete( rootUri, 
        MediaStore.MediaColumns.DATA + "=?", new String[]{ path } );
}

P.S。我想评论Spencer Ruport的答案,但还没有足够的声誉。

答案 2 :(得分:7)

简单易用:每当您添加文件时,让MediaStore ContentProvider了解相关信息

sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(fileToAddInMediaStore)));

删除:只需使用

getContentResolver().delete(Uri.fromFile(fileToDeleteFromMediaStore), null, null)

答案 3 :(得分:4)

以下适用于我。您可以使用此功能删除或添加文件。

MediaScannerConnection.scanFile(
                context,
                new String[]{fileToDelete, fileToAdd},
                null, null);

答案 4 :(得分:1)

可用的方法是从库中删除项目。 本文详细介绍了如何添加到媒体库或从媒体库中删除。 http://androidyue.github.io/blog/2014/01/19/scan-media-files-in-android/希望这可以帮助你。