问题标签 [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 投票
1 回答
307 浏览

android - 如何在 Kitkat 中使用 SAF 在辅助存储上创建多个文件?

从 Android 4.4 KitKat 开始,应用程序无法完全访问辅助存储。

我们可以使用 Storage Access Framework 来访问。如果我想创建文件,我需要调用ACTION_CREATE_DOCUMENT意图。

如果我想同时创建多个文件,我该如何创建呢?我每次都需要调用那个意图吗?

0 投票
1 回答
466 浏览

android - Android 存储访问框架和媒体扫描器

我正在使用存储访问框架将图像下载到外部 sd 卡。问题是这些图像没有出现在图库中。我试图通过发送 DocumentFile uri 来使用意图通知 Android 媒体扫描仪,但这不起作用。以下是我如何尝试通知媒体扫描仪添加了新图像:

是否有另一种方法可以通知 Android 添加了新图像?(我已经尝试过这里描述的方法,但我无法使用这些方法获得真正的路径)

0 投票
1 回答
1970 浏览

android - 额外启用带有存储访问框架 (SAF) 的显示/隐藏 SD 卡

我正在使用存储访问框架 (SAF):

我想知道是否有额外的功能可以启用“显示 SD 卡”选项,用户可以在溢出菜单中看到。

在此处输入图像描述

0 投票
1 回答
353 浏览

android - 是否可以在 kitkat+ 上没有文件选择器的情况下写入 sd 卡

我想在没有文件选择器的情况下从 SD 卡根目录中删除文件。

搜索了几天后,我还没有找到办法。但是文件应用程序ES文件资源管理器没有问题,有人知道这是为什么吗?

我发现的最接近的是 如何使用为 Lollipop 提供的新 SD-Card 访问 API? 但我必须使用文件选择器

显现

0 投票
1 回答
2053 浏览

android - 如何使用 Storage Access Framework 高效地创建子文件夹?

我目前正在使用以下代码使用 SAF 在 Lollipop 上的 MicroSD 中创建子文件夹

上面的代码可以正常工作并创建子目录,但创建文件夹需要大约 5 秒。我是 SAF 的新手,所以这是找到子目录的唯一方法,还是有其他有效的方法来创建子目录?

在内部存储上,我将使用

这将在几分之一秒内创建文件夹。

0 投票
1 回答
1011 浏览

android - 使用存储访问框架创建文件

最近,我收到一个用户的崩溃报告,该用户试图在棒棒糖设备上使用存储访问框架创建数据库备份。

例外:

我的代码:

问:

是否所有 v19+ 设备都真正支持存储访问框架?我们应该如何处理这种情况?

[更新]

从不同的设备收到 4 个额外的崩溃报告。

0 投票
3 回答
328 浏览

android - 使用 Storage Access Framework / SD 创建 .nomedia 文件

我正在使用 SAF,以便用户可以使用我的相机应用程序将视频存储在他们的外部 SD 卡甚至 USB 驱动器上。我不希望它们出现在画廊中,所以我需要创建一个 .nomedia 文件。

我目前正在使用此代码:

问题是 SAF 创建了一个名为 nomedia.txt 的文件,而不是 dotfile。我在 application/* 范围内使用了几种不同的 mime 类型,但是根本没有创建任何文件。很高兴任何指针:)

0 投票
1 回答
533 浏览

android - 存储访问框架 FileNotFoundException

我设法使用存储访问框架打开了一个目录。SAF 返回Uri打开的目录。当我尝试在该目录中打开一个文件时,我FileNotFoundException什至知道该文件确实存在(我已经检查过)。

显然我做错了什么。这是我正在尝试做的一个例子:

0 投票
1 回答
2887 浏览

android - 存储访问框架持久权限不起作用

我使用 Android Storage Access Framework 来访问 SD 卡上的一些文件。保留此权限对我来说很重要,以便能够在设备重启后编辑文件。

因此,根据存储访问框架文档,我使用持久权限,即使设备已重新启动,用户也可以通过您的应用程序继续访问文件。

但是,一段时间后,我注意到某些用户的权限以某种方式被撤销。因为当我尝试使用 SAF 进行写作时,我会android.system.ErrnoException: open failed: EACCES (Permission denied) 在该异常之后检查我使用了哪些权限,mContext.getContentResolver().getPersistedUriPermissions()但是它返回空列表。我确信用户为我提供了正确的权限,并且该权限适用于当前安装的 SD 卡,因为我在数据库中跟踪此操作。

目前,在这种情况下,我正在显示文档选择器,以便用户可以再次为我提供新权限,但要求用户执行相同的操作通常对用户不友好。

什么会导致权限被撤销?以及如何防止这种撤销?

我已经在我的所有设备上测试了多次重启手机、更改时间、移除插入 sd 卡,但无法丢失任何 saf 权限。

我有下一个获取权限的代码:

0 投票
2 回答
753 浏览

android - 测试应用程序中的存储访问框架

Intent.ACTION_OPEN_DOCUMENT_TREE用来授予我的应用程序对外部存储的写访问权限(在 Lollipop 和 Marshmallow 上)。

但我想在测试应用程序中写入外部存储。Intent.ACTION_OPEN_DOCUMENT_TREE使用系统对话框,因此我无法在测试期间授予权限。我还尝试在应用程序中允许它,然后在测试中使用它,但它不是共享的 - 应用程序项目和测试项目是不同的包。

有人知道一些解决方法,例如授予整个外部存储的权限以进行测试吗?也许通过改变一些系统属性?

adb shell setprop SOMEPROPERTY 1