【问题标题】:Delete Audio From Sdcard从 SD 卡中删除音频
【发布时间】:2018-07-09 16:10:48
【问题描述】:

我正在尝试删除 SD 卡中的音频文件,但没有成功

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

在浏览帖子时,我遇到了Storage Access Framework,但无法理解。是否需要从 SD 卡中删除文件? 此外,我只能使用 Content Resolver 来删除这样的文件吗?

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

或者还有其他删除音频的方法吗? 我的应用程序在Write permissionRead permission 上得到了很好的提升,我正在Marshmallow 6.0 上进行测试

请回答。

提前致谢。

【问题讨论】:

  • Moreover Can I only use Content Resolver to delete Files Like this? getContenResolver().delete(uri,null,null);。你试过吗?成功了吗?
  • @greenapps 刚刚在其中一篇帖子中找到它。让我试试
  • @greenapps 尝试过,但它只是将其从 Mediastore 表中删除,而不是实际从存储中删除

标签: android audio storage delete-file sd-card


【解决方案1】:

您需要确保两件事:

1) 由于您的目标是 Android.M,因此您还需要获得运行时权限。仅仅在 Manifest 中请求它们是不够的。

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 不需要这些权限。
  • 第一个建议就像一个一般性建议,即使在这种情况下不适用,因为我通过使用“我的应用程序在写入权限和读取权限方面得到了很好的提升”感到某种自满可能导致未来的错误。 ;)
  • @SotirisM.Magionas 我需要获取 sd 卡 uri 或类似的东西还是仅仅一个文档文件对象就足够了??
  • @SotirisM.Magionas 是这个代码OK:document=DocumentFile.singleFileUri(context,Uri.parse(path)); document.delete();
  • @SotirisM.Magionas 无法使用上述代码。任何其他方法
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多