java - 删除文档文件后 takePersistableUriPermission 访问丢失
问题描述
选择一个文件夹后
registerForActivityResult( new ActivityResultContracts.OpenDocumentTree ...
我正在接受写作许可
getContentResolver().takePersistableUriPermission(uri, Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
稍后在应用程序中,我已将文件写入用户选择的目录
saveDir = DocumentFile.fromTreeUri(App.getInstance(), Uri.parse(uriStringSavedInPrefs));
问题是:当我创建一个文件时,它创建成功
DocumentFile finalResFile =saveDir.createFile("image/*",resFileName);
但是后来我删除了它,它也被删除了
DocumentFile.fromTreeUri(App.getInstance(),finalResFile .getUri()).delete();
但是后来我尝试再次创建一个新文件,但出现错误
DocumentFile finalResFile =saveDir.createFile("image/*",someNewFileName);
Failed query: java.lang.SecurityException: Permission Denial: reading com.android.externalstorage.ExternalStorageProvider uri content://com.android.externalstorage.documents/tree/primary%3A.AndroidData/document/primary%3A.AndroidData/children from pid=32273, uid=10546 requires that you obtain access using ACTION_OPEN_DOCUMENT or related APIs
Failed to create document
为什么删除单个文件后写入权限会丢失?
解决方案
如果我像这样删除文档文件,我将失去访问权限,仍然不知道为什么(我没有删除用户选择的目录,只是我在其中创建的一个文件)
DocumentFile.fromTreeUri(App.getInstance(),uri).delete();
使用它来删除文件以某种方式起作用(我不会失去访问写入权限)
DocumentsContract.deleteDocument(App.getInstance().getContentResolver(),uri);
我讨厌新加坡武装部队
推荐阅读
- php - 会话被自动销毁(随机)
- reactjs - 在 ReactJS 中删除 Paypal iframe
- javascript - A* 算法返回启发式值 (JavaScript)
- serverless-framework - 无法使用无服务器 1.x 更新现有 lambda
- javascript - socket.io 和 Node 的 Net 模块的区别
- matplotlib - 数据少时如何细化 Weibull 曲线
- tsql - 如何忽略 LIKE 查询中的零宽度空格字符,或解决方法?
- .net-4.6 - 合并/转换 VirtualFileDataObject 和 System.Windows.Forms.DataObject
- protractor - 运行量角器时出现以下错误
- node.js - express js API服务器多个请求互相阻塞?