Android的媒体扫描仪:如何删除文件?

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

Solutions Collecting From Web of "Android的媒体扫描仪:如何删除文件?"

以下工作适合我。 您可以使用这个删除或添加文件。

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

我能够用这两个问题中的点点滴滴来组合一个方法

  1. 什么是MediaStore.Audio.Playlists.Members.getContentUri引用的String'volumeName'参数?
  2. 如何在Android上刷新MediaStore?

基本上我只是运行一个查询每一个MediaStoretypes(audio,video和图像)select的path和删除我find的任何logging。

 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 } 

我不完全确定这是如何安全的,但这是迄今为止唯一的解决scheme,一些初步的testing似乎正在工作。 我邀请其他人提交其他答案,如果任何人有关于这种方法的更多信息或更好的方法来执行此function。

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 } ); } 

PS我想评论Spencer Ruport的答案,但是还没有足够的声望。

易如反掌:只要您添加一个文件,让MediaStore Content Provider知道它的使用

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

删除 :只需使用getContentResolver()。delete(Uri.fromFile(fileToDeleteFromMediaStore),null,null)

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