如何从媒体商店删除单个文件?

时间:2013-12-21 12:52:50

标签: android mysql

此代码有效

getActivity().getContentResolver().
   delete(MediaStore.Audio.Media.EXTERNAL_CONTEN‌​T_URI ,
          "TITLE ='" + songdetails.get(index).song + "'", null); 

但问题是,它将删除具有给定标题的所有文件。我尝试了 DATA 而不是 TITLE ,但它没有弹出错误,说#34;没有名为DATA"的列。

任何人都可以就使用什么而不是标题提出任何建议吗?或者任何人都可以告诉我完全不同的删除方式。我也试过了,哪个有效,

File file = new File(songdetails.get(index).Path);
                 boolean deleted = file.delete();

但问题是mediastore没有更新

3 个答案:

答案 0 :(得分:3)

删除功能后尝试此行

sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://"+ Environment.getExternalStorageDirectory())));

(上面的解决方案似乎从android 4.4起无效)

对于DATA:

MediaStore.MediaColumns.DATA

你也可以尝试使用这个

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

请参阅此链接了解(某种)详细方法:

http://sandersdenardi.com/querying-and-removing-media-from-android-mediastore/

还要记住:

  

所有查询和删除(以及此事项的插入和更新)   阻止直到底层事务完成。你应该表演   ContentResolver上的这些操作在一个单独的异步上   线。虽然MediaStore上的删除不应该有重大意义   如果在主要时间执行,它将阻止UI   线程。

答案 1 :(得分:2)

执行类似的操作..扫描文件。只需传递要删除的文件路径..

private void scanaddedFile(String path) {
    try {
        MediaScannerConnection.scanFile(context, new String[] { path },
                null, new MediaScannerConnection.OnScanCompletedListener() {
                    public void onScanCompleted(String path, Uri uri) {
                        context.getContentResolver()
                                .delete(uri, null, null);
                    }
                });
    } catch (Exception e) {
        e.printStackTrace();
    }

}

答案 2 :(得分:0)

getActivity().getContentResolver().delete(
   MediaStore.Audio.Media.EXTERNAL_CONTEN‌​T_URI ,
   MediaStore.MediaColumns.Data + " = ?", 
    new String[] { fileName });

MediaStore.MediaColumns.DATA的值为"_data"