从SD卡中删除音频文件

3

我正在尝试删除SD卡中的音频文件,但是不成功。

public boolean delete(String path)
{ 
   return new File(path).delete();
}

在阅读帖子时,我看到了存储访问框架,但不理解。它是否需要用于从SD卡中删除文件? 此外,我能否只使用内容解析器来像这样删除文件?

getContenResolver().delete(uri,null,null);

还有其他方法可以删除音频吗?

我的应用已经获得了写入权限读取权限,我正在Marshmallow 6.0上测试。

请回答。

谢谢提前。


此外,我只能使用内容提供者来删除文件吗?getContenResolver().delete(uri,null,null); 你试过吗?它有效吗? - greenapps
@ greenapps 刚在一篇帖子中发现了它。让我试试看。 - Dibyaranjan Mishra
@greenapps 尝试过,但它只从Mediastore表中删除,而不是实际从存储中删除。 - Dibyaranjan Mishra
1个回答

2

您需要确保两件事情:

1)由于您的目标是Android.M,您需要在运行时获取权限。仅在清单中请求权限是不够的。

2)如果您想要读/写SD卡上的数据,则需要使用DocumentFile而不是File。逻辑大致相同,但您可以在此处查看更多信息:https://developer.android.com/reference/android/support/v4/provider/DocumentFile.html


在您的OnCreate或任何希望打开对话框的位置使用此命令,以选择SD目录。选择其中一个包含您的图像的目录。

startActivityForResult(new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE), 42);

那么你需要按原样使用这个方法:
@Override
    public void onActivityResult(int requestCode,int resultCode,Intent resultData) {
        if (resultCode != RESULT_OK)
            return;
        Uri treeUri = resultData.getData();
        DocumentFile pickedDir = DocumentFile.fromTreeUri(this, treeUri);
        grantUriPermission(getPackageName(), treeUri, Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
        getContentResolver().takePersistableUriPermission(treeUri, Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);

        DocumentFile YourAudioFile=  pickedDir.findFile("YourAudioFileNameGoesHere");


// And here you can delete YourAudioFile or do whatever you want with it

}

使用DocumentFile时,您不需要这些权限。 - greenapps
最好使用 Intent.ACTION_OPEN_DOCUMENT 来选择文件本身。因为这样你就可以直接获得文件的 URI。 - greenapps
@DibyaranjanMishra 你解决了你的问题吗?如果是,请点赞并接受答案。 - Sotiris S. Magionas
我发现代码出现了空指针异常,指向了file.delete()方法。但是我检查了我的URI和文件名都是正确的,但是没有用。 - Dibyaranjan Mishra
是的,我有权限,名字需要跟着扩展名吗? - Dibyaranjan Mishra
显示剩余6条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接