问题标签 [documentfile]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
android - 无法再次将 Uri 转换为 String 和 String 到 Uri
我正在开发音乐播放器,并希望使用存储访问框架来访问存储中的文件。为此,我使用了Intent.ACTION_OPEN_DOCUMENT_TREE
and contentResolver.takePersistableUriPermission(...)
。但是一旦我获得了权限,我就必须存储允许的路径,以便我使用SharedPreferences
它。
当我将我从Intent.ACTION_OPEN_DOCUMENT_TREE
to 字符串中获得的 URI 转换为重用它时,它给了我一个nullPointerException
(它说我从首选项转换字符串获得的 URI 是null
)。
虽然如果我使用相同的 URI 而不通过保存到SharedPreferences
,它工作得很好。
这是代码:
如果onCreate()
我取消注释listFiles()
,它给出nullPointerException
但使用与您在上面看到的相同的代码块onActivityResult()
,一切正常。我正在谈论的块:
我不明白为什么它说rootUri
是空的。
我查看了所有类似这样的问题。我正在使用建议的相同功能 (toString()
和Uri.parse
) 进行转换,但它似乎不适用于存储访问框架。
android - Android 11:DocumentFile findFile() 太慢
随着谷歌存储策略的更新,我不得不改变我保存文件的方式。
首先,我的应用程序之前将项目文件夹保存到 /sdcard/。但是,由于这个政策,使用 File 访问变得不可能,我尝试了几种方法。
我也想过把它保存在一个特定于应用程序的文件空间中,但是由于删除应用程序时不应删除项目文件夹,因此无法使用。
1.使用媒体存储
起初,我尝试使用 MediaStore。我可以使用RELATIVE_PATH将文件放在一个文件夹中,但是文件的控制非常困难,并且项目文件夹中的文件也是与媒体(照片,视频,音乐)无关的文件。
2.使用文档文件
我找到了另一种方法。使用 Intent 的 ACTION_OPEN_DOCUMENT_TREE,我从用户那里获得了项目文件夹的访问权限和树 uri,并且我能够通过使用它创建 DocumentFile 来访问该文件。
起初我认为这是一个非常好的方法,但很快我发现它很慢。
特别是对于 findFile() 方法,扫描单个文件需要将近一秒钟的时间。我的项目文件夹里有几十个文件,所以这个不能商业化。
有没有更好的办法?有一些帖子要求您试用 DocumentContracts,但似乎没有获取文件列表或检查它们是否存在的功能。
以下是我当前的代码:首先,请求树 uri:
二、获取树uri:
而且,尤其是这样使用 findFile 时,它会变得非常慢。
android - onActivityResult Uri - 创建子文件夹并获取新子文件夹的 DocumentUri
我在onActivityResult
构建一个DocumentUriUsingTree
. 现在我拿这个DocumentUri
,构建一个DocumentFile
来创建一个新文件夹。
活动结果:
resultUri == uriDirFolder 从SharedPreference
get-Methode 获取
docTreeUri = content://com.android.externalstorage.documents/tree/3339-6133%3AStorage%20Card%2FMusic%....
dirDf 看起来像content://com.android.externalstorage.documents/tree/3339-6133%3AStorage%....dirName
df 返回父文件夹而不是新创建的文件夹
我需要DocumentFileUri
从新文件夹中使用OutputStream
它来将文件保存到其中。
我在这里做错了什么?
谢谢,亚历杭德罗
java - 删除文档文件后 takePersistableUriPermission 访问丢失
选择一个文件夹后
我正在接受写作许可
稍后在应用程序中,我已将文件写入用户选择的目录
问题是:当我创建一个文件时,它创建成功
但是后来我删除了它,它也被删除了
但是后来我尝试再次创建一个新文件,但出现错误
为什么删除单个文件后写入权限会丢失?
android - 遍历 DocumentFile 树
我正在尝试递归遍历 Android DocumentFile 树,但无法获取要为子文件夹返回的文件列表。当我在文件夹 URI 上尝试 listFiles() 时,我得到了每次返回的根文件列表。
为什么这不起作用?
android-studio - 如何在 Android 中读取 DocumentFile 的内容?
我向应用程序添加了一项功能,允许用户在外部存储上创建本地备份。该部分运行良好,但我无法恢复该备份。
使用 SAF,我找到了一种让用户选择他们想要恢复的文件的简单方法。他们选择的文件作为DocumentFile
如何在 API 26 及更高版本上打开 DocumentFile 并读取其内容?
到目前为止,我尝试了两件事,但都没有奏效:
1)
new File(myDocumentFile.getUri().getPath())
2)我试过这个答案,但没有奏效。它也很老套,我真的不需要访问 java.io.File 我只需要一种读取内容的方法。
Google 希望我们如何阅读用户的文件?
android - 为 android sdk 30 读取存储卡上的自定义文件
我有一个应用程序可以创建在画廊中显示的自定义文件。它们不是图像或其他标准媒体文件。由于文件很大,我要求用户访问将存储文件的文件夹。
到目前为止,一切都很好。
通过 DocumentFile 读取这些文件或文件信息比通过 File 慢得多。像这样的操作
每个最多需要15ms,在读取大量文件时会累积很长时间。
处理这个问题的最佳方法是什么?还有另一种方法可以做到这一点吗?我不希望文件位于内部应用程序内存中,否则用户在卸载应用程序时可能会丢失他们的工作。
提前致谢!这让我压力很大。
java - 如何获取尚不存在的文档文件 uri?
我正在尝试使用尚不存在的给定文件名生成 Uri。我已请求用户允许访问此文件夹。
基本上,我有一棵树 Uri 和一个名字,比如“untitled.abc”。
如果给定目录中已经存在 untitled.abc,我想检查 untitled1.abc 是否存在,然后检查 untitled2.abc 等等。
我目前所拥有的不起作用,并且可能是错误的方法:
我实际上并不想创建文件,但我不知道如何为尚不存在的文件创建 uri。使用普通的 File 类很容易:
但我只是不知道如何使用 DocumentFile 和 Uri 实现相同的目标。肯定有更好的方法来做到这一点,对吧?
编辑:我想我想做的是创建一个具有给定名称和文件夹的 Uri。
Edit2:我也试过这个:
android - 使用 Android DocumentFile API 时如何列出子文件夹内容
我正在尝试切换到 DocumentFile API,因为 Android 不再允许使用 File API ...
当我选择一个文件夹时,它返回的 URI 是
现在我打电话
获取文件夹的内容。我想保留所有子文件夹的列表
我找到的第一个子文件夹具有以下 URI
我需要保存它,以便稍后我可以检查该文件夹中的文件
问题是当我尝试打电话时
在此子文件夹 uri 上,它返回与此子文件夹的父文件夹匹配的 DocumentFile
如何在此处保存子文件夹 uri,以便稍后列出此子文件夹文件?
android - 使用 DocumentFile TreeUri 在 Android 11 上的 MediaStore 中更新 DATE_MODIFIED
我正在努力使用 DocumentFile/TreeUri 更新媒体存储中的元数据。这就是我尝试这样做的方式:
它失败了,logcat 显示:
W/MediaProvider:忽略 date_modified 的突变
我究竟做错了什么?DocumentFile 是可写的,它是通过 Intent.ACTION_OPEN_DOCUMENT_TREE 接收的,并且在文件夹上调用了 takePersistableUriPermission。我还尝试在之前使用 IS_PENDING 更新条目并在之后删除:
无论出于何种原因返回也是错误的,但我看到该文件以 .pendingxxxx 为前缀,所以它似乎工作