android

您所在的位置:网站首页 华为OPEN_DOCUMENT_TREE android

android

2024-07-10 01:21| 来源: 网络整理| 查看: 265

我在我的应用程序(在 Android 5+ 中)中实现“选择保存目录”(对于所有文件)功能时遇到了问题。我需要的是一个目录选择器——所以我决定使用系统选择器——发送 Intent ACTION_OPEN_DOCUMENT_TREE。我已经完成的是实现与稍后处理 uri 相关的所有内容,同时保存文件(创建 DocumentFile,创建适当的 Stream,甚至获得稍后使用的正确路径)。我无法实现的是保存我收到的 URI(例如在 SharedPreferences 中)以使其更永久,因为它使应用程序设置之一,用户必须设置一次。

这就是我尝试保存和恢复我的 uri 的方式:

private Uri getSaveTreeUri() { if (mSaveTreeUri == null) { String uriString = PreferenceManager.getDefaultSharedPreferences(this).getString(SAVE_TREE_URI, null); if (uriString != null) mSaveTreeUri = Uri.parse(uriString); } return mSaveTreeUri; } private void setSaveTreeUri(Uri saveTreeUri) { mSaveTreeUri = saveTreeUri; SharedPreferences.Editor editor = PreferenceManager.getDefaultSharedPreferences(this).edit(); editor.putString(SAVE_TREE_URI, saveTreeUri.toString()).commit(); }

然后当我使用它时,通过

DocumentFile documentFileDir = DocumentFile.fromTreeUri(this, getSaveTreeUri());

我明白了

java.lang.IllegalArgumentException: Invalid URI: /tree/D428-E753:Music

有没有可能使这项工作?非常感谢所有帮助!

最佳答案

ACTION_OPEN_DOCUMENT_TREE 返回具有关联权限的树 Uri。如果您想在以后的 session 中重新访问 Uri,则必须保留权限。

使用takePersistableUriPermission保留权限。

使用getPersistedUriPermissions获取持久化 Uris 的列表。

关于android - ACTION_OPEN_DOCUMENT_TREE 和 uri 序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37157765/



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3