【问题标题】:How to delete a file using Storage Access Framework?如何使用存储访问框架删除文件?
【发布时间】:2015-10-31 11:03:36
【问题描述】:

如何在 Android 中使用存储访问框架删除文件?我在文档中找到了这种方法,但无法正常工作: DocumentsContract.deleteDocument(ContentResolver, Uri);

我可以在不询问用户要删除什么的情况下删除特定文件吗?

编辑:

我尝试使用 Uri.fromFile 获取文件 uri,但因空指针异常而失败。 我尝试使用 ACTION_OPEN_DOCUMENT 获取文件 uri,但它要求用户选择一个文件(我想自己指定文件)。即使这样它也不起作用,给出异常并告诉我不支持删除。

【问题讨论】:

  • 详细解释“无法正常工作”是什么意思。
  • 我试图澄清它。我想知道是否可以使用 SAF 删除存储根目录中的任意文件(我想自己指定该文件)。

标签: android


【解决方案1】:

使用应用上下文调用上下文解析器。

DocumentsContract.deleteDocument(getApplicationContext().getContentResolver(),uri)

【讨论】:

    【解决方案2】:

    我已经回答了你的问题, 如果您有文档的 URI 并且文档的 Document.COLUMN_FLAGS 包含 SUPPORTS_DELETE,则可以删除该文档。例如:

    DocumentsContract.deleteDocument(getContentResolver(), uri);

    参考:http://developer.android.com/guide/topics/providers/document-provider.html 万事如意

    【讨论】:

    • 我自己也读过。没有工作示例。我编辑了我的问题。
    【解决方案3】:

    您首先需要 uri 的写入权限才能进行更改。

    val intent = Intent(Intent.ACTION_OPEN_DOCUMENT_TREE).apply {
                flags = Intent.FLAG_GRANT_READ_URI_PERMISSION or
                        Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION or
                        Intent.FLAG_GRANT_WRITE_URI_PERMISSION
            }
    startActivityForResult(intent, OPEN_DIRECTORY_REQUEST_CODE)
    

    如果您在活动中收到结果,您将能够对所选目录中的文件进行更改。 (对单个文件使用 Intent.ACTION_OPEN_DOCUMENT)。

    如果需要示例,可以找here

    【讨论】:

      【解决方案4】:

      如果它是您未经许可创建的文件,您可以将其删除,我知道。这是代码,您可以将其放在一个块中并在需要时调用它。还使用 str2 = uri.toString(); 保存每个 uri然后共享首选项字符串。

      Uri uri2 = Uri.parse(str2);
      try{ DocumentsContract.deleteDocument(
      getApplicationContext().getContentResolver(), uri2);
      } catch (FileNotFoundException e) {}    
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-06-28
        • 2021-10-14
        • 2019-11-16
        • 2016-10-14
        • 2017-08-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多