繁体   English   中英

如何使用存储访问框架删除文件?

[英]How to delete a file using Storage Access Framework?

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

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

编辑:<\/strong>

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

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

DocumentsContract.deleteDocument(getContentResolver(), uri);

参考: http : //developer.android.com/guide/topics/providers/document-provider.html一切顺利

使用应用程序上下文来调用上下文解析器。

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

您首先需要 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)。

如果您需要示例,可以在此处找到

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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