此代码有效
getActivity().getContentResolver().
delete(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI ,
"TITLE ='" + songdetails.get(index).song + "'", null);
但问题是,它将删除具有给定标题的所有文件。我尝试了 DATA 而不是 TITLE ,但它没有弹出错误,说#34;没有名为DATA"的列。
任何人都可以就使用什么而不是标题提出任何建议吗?或者任何人都可以告诉我完全不同的删除方式。我也试过了,哪个有效,
File file = new File(songdetails.get(index).Path);
boolean deleted = file.delete();
但问题是mediastore没有更新
答案 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_CONTENT_URI ,
MediaStore.MediaColumns.Data + " = ?",
new String[] { fileName });
MediaStore.MediaColumns.DATA
的值为"_data"
。