问题标签 [storage-access-framework]

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.

0 投票
2 回答
1714 浏览

android - ContentResolver doesn't contain just created image in an immediate query after creation of file

I'm using this code to copy an image using documentFile.createFile()

And this is how I query ContentResolver after creating image, to immediately refresh my image gallery with the result of query which should contain info of newly created image.

But immediate query couldn't find newly created image. And if I run query again after a moment, newly created image is there in the result.

It seems providing information for newly created image takes time for ContentResolver(if ContentResolver is in charge for it) as it would be running in background while I run immediate query.

Is there any method or listener to know when the newly created image is registered by ContentResolver?

0 投票
1 回答
2959 浏览

android - SAF(存储访问框架)如何识别您的 U 盘?

使用 Android 6.0.1,API 23,

如何在 SAF 选择器中显示连接到 Android 手机的 USB 记忆棒,该选择器显示所有匹配的文档提供者(包括您的 USB 记忆棒)?此外,如何设置 SAF 以便在 USB 便携式存储设备上创建文件和文件夹?

SAF-documentation,我尝试:

但是 USB 便携式存储不是选择器选择的一部分……

我错过了什么?是否有显示必要步骤的示例项目?

@CommonsWare:这里是所需的屏幕截图:

在此处输入图像描述

0 投票
1 回答
322 浏览

android - 即使设置了持久性,文档选择器也会继续显示(在 SAF - 存储访问框架中)

使用 Android 6.0.1,API 23,

我成功地实现了从用户在 SAF 的文档选择器(存储访问框架)中选择的存储位置读取文件。

现在,我想使用Persist permissionsSAF 允许的,以允许我的应用程序始终选择相同的文件(但没有任何文档选择器窗口 [和子窗口] 一直弹出)。

我以某种方式成功实现了 Persist-permissions(如SAF-doc中所示)(...为此,请参阅下面的代码示例...) - 但是出现了问题:

  1. 尽管持久性许可工作 - 为什么文档选择器窗口不断弹出?一旦用户选择了文件 - 从这一刻起 - 我想简单地获取文件内容,而不需要任何选择器窗口进入前台。这可能吗?如果是,如何?(我可以说持久性权限在某种程度上是有效的,因为文件会立即被读取,而用户不必再次选择。但是这个讨厌的选择器窗口仍然不应该出现 - 或者是吗?)
  2. 即使我的应用程序关闭或停止,是否可以保持 SAF 持久性权限?如果是,如何?

这是获取文件内容的代码示例,包括我的具有持久性权限的试用版:

在 StorageClientFragment 类中:

创建 Fragment 在 MainActivity 中完成:

单击测试按钮时调用 FileSearch 完成:

上面的代码运行良好。但同样,我怎样才能阻止 SAF 文档选择器窗口一直显示(即使设置了持久权限)?

0 投票
2 回答
1267 浏览

android - 使用 SAF 获取 Persistable SD Cad 写入权限

在我的应用程序中,图像文件列表在 recyclerview 中被夸大了。然后在应用程序编辑图像文件的元数据之后。

我编写元数据的代码:-

我可以更新存储在手机内存中的图像文件,但是对于 SD 卡图像,我得到错误 ---->

我知道从 android 5 开始,我们需要使用 SAF 获得许可。我获得许可的代码:-

现在我不知道如何处理这个 treeUri。我希望我只在初始启动时获得一次 SdCard 权限。

简单来说,我的问题与这个问题有关:-

这个链接

0 投票
1 回答
286 浏览

android - 在 android 6 marshmallow 中需要来自 USB 的文件 Realpath?

我在这里说的是 USB 而不是存储卡或内部存储器,并且需要一个确切的路径而不是 Uri。

直到 Android L 我从 /mnt 或 /storage 或任何其他目录获得文件路径。但在棉花糖中,我没有找到我的 USB 的确切位置。

然后我向存储访问框架前进。但它没有返回实际路径,而是返回了一个 Uri。

我还浏览了 AFileChooser Project 和 A stackoverflow post KitKat 上 Android Gallery 的 stackoverflow 帖子返回 Intent.ACTION_GET_CONTENT 的不同 Uri

但这没有帮助。所以有什么方法可以访问 Realpath,例如(/storage/abc/filename.mp4)。

0 投票
1 回答
12215 浏览

android - Android SAF(存储访问框架):从 TreeUri 获取特定文件 Uri

我正在使用外部 SD 卡的 PersistableUriPermission 并将其存储以供进一步使用。现在我希望当用户从我的应用程序中的文件列表中向我提供文件路径时,我想编辑文档并重命名它。

所以我有要编辑的文件的文件路径。

我的问题是如何从我的 TreeUri 中获取该文件的 Uri 以便编辑文件。

0 投票
1 回答
561 浏览

android - 存储访问框架和创建文件名不可编辑的文件

是否可以将存储访问框架与 ACTION_CREATE_DOCUMENT 一起使用并使文件名具有粘性 - 用户无法更改?

来自文档的这段代码创建了一个新窗口,以便用户可以选择新文件的位置,也可以更改文件名。后者是不受欢迎的...

我已经搜索过这个问题的答案,但没有找到任何答案。保存文件后重命名文件的唯一方法是什么?

0 投票
0 回答
439 浏览

android - 使用 Storage Access Framework 时的致命信号 11

我正在尝试使用存储访问框架从外部 SD 卡中删除文件。我通过拥有 SD 卡根 Uri 然后使用 DocumentFile 的不同方法访问文件层次结构中的特定文档来获得访问权限。这就是我的做法

我正在使用以下代码访问外部 SD 卡根目录 -

然后我保存 treeUri 并请求持久许可

然后我得到要删除的文件的 absolutePath 并尝试获取它的 DocumentFile 对象。

此绝对路径深入到外部 SD 卡的层次结构中。然而,这给了我一个分段错误,根本没有例外。我也尝试使用以下代码从文件中获取 DocumentFile -

这给了我同样的问题。(MainActivity.hub是 MainActivity 的单例。不要怪我,我只是在这里修复错误)。

不应该是这样的吗?仅使用 Root Uri 权限访问驻留在 SD 卡内的文件有什么问题。不是为什么ACTION_OPEN_DOCUMENT_TREE被创建而不是ACTION_OPEN_DOCUMENT. 无论如何,我在 Marshmallow 中使用它,所以它应该可以工作。

这是我得到的分段错误的崩溃日志。

0 投票
1 回答
1574 浏览

android - 更新 ContentResolver 以获取更新的文件计数

我正在Storage Access Framework从 Android 的棉花糖版本的外部存储中删除一些文件。我需要显示外部存储中可用的不同类型文件的数量。我得到了适当的内部存储计数,但对于外部存储,我没有得到更新的视频文件计数。每当我打开内置文件管理器然后返回应用程序时,它会正确更新文件计数,这意味着我需要调用某种方法来更新 ContentResolver。

这是我获取外部存储中视频数量的方法

我尝试使用不同的方法来获得正确的文件计数,包括调用cursor.setNotificationUri(cr,uri);notifyChange()打开ContentResolver和使用MediaScanner。这是我删除视频文件后使用的代码 -

这是刚刚使用删除path的字符串 Uri 。我也尝试在方法中使用它。 DocumentFileStorage Access FrameworknotifyChange()

那么如何更新 ContentResolver 以返回更新的文件计数?

0 投票
1 回答
1879 浏览

android - 从存储访问框架中的文档 ID 获取文件 Uri

我正在使用此Google Sample中所述的目录选择。它确实提供了所选目录的子目录的文件名和 mime 类型。COLUMN_DOCUMENT_ID如果我在光标查询上使用,我也可以获得文件的文档 ID 。我对孩子的文件 URI 感兴趣。当我使用ACTION_OPEN_DOCUMENT代替时ACTION_OPEN_DOCUMENT_TREE,我很容易得到子 uri,它是通过添加一个%2Fchildfile.extention(%2F 只是一个正斜杠) 获得的。所以我尝试使用以下代码获取子文件 uri -

我得到了文件名,但是当我在其上运行 exists() 方法时(通过将其转换为 DocumentFile),它返回 false。这意味着,要么我没有文件的权限,要么这不是获取孩子 uri 的正确方法。

我在这里遗漏了什么还是有其他方法可以选择一个文件夹并轻松获取所有子项的文件 uri。

PS:我目前正在Marshamallow中检查它。