繁体   English   中英

无法在Android中删除文件

[英]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 尽管我会考虑尝试使用MediaScannerConnectionscanFile()来扫描包含已删除文件的目录,但我没有确切地记得如何对已删除文件执行此操作。

因此,似乎可行的最终解决方案是:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM