[英]Can't delete file in Android
我希望删除存储在手机中(没有SD卡)的音乐文件。 我有文件路径, File.exists()
说的是真的。 接下来, File.delete()
也说为true,但是文件保留在原处。 但! “删除”之后,我将无法再播放此文件,编辑名称并且也无法复制它。 但是我可以手动删除它。
我已经设置了android.permission.WRITE_EXTERNAL_STORAGE
。 OS 4.4.4 GPE
我的错误在哪里? 任何建议,谢谢。
File file = new File(Path);
if (file.exists()){
file.setWritable(true, false);
return file.delete();
}
Windows不会直接查看外部存储。 它正在查看由Android设备上的媒体传输协议(MTP)服务器提供的数据。 反过来,它正在使用MediaStore
索引,而不是实际的文件系统。
如果您对外部存储进行任何更改(例如删除文件),则需要更新MediaStore
。 尽管我会考虑尝试使用MediaScannerConnection
和scanFile()
来扫描包含已删除文件的目录,但我没有确切地记得如何对已删除文件执行此操作。
因此,似乎可行的最终解决方案是:
public Boolean deleteTrack(String key){
MusicTrack track = getAlbum(0).getTrackByKey(key);
if (track == null) return false;
File file = new File(track.getData().Path);
if (file.exists()){
file.setWritable(true, false);
String where = MediaStore.Audio.Media.DATA +"=\""+ track.getData().Path +"\"";
if (context.getContentResolver().delete(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, where, null) == 1){
if (file.exists()){
Boolean d = file.delete();
context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(file)));
return d;
}
return true;
}
}
return false;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.