gpt4 book ai didi

android - ACTION_OPEN_DOCUMENT_TREE 和 uri 序列化

转载 作者:搜寻专家 更新时间:2023-11-01 07:49:29 24 4
gpt4 key购买 nike

我在我的应用程序(在 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com