问题标签 [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 回答
933 浏览

android - 存储访问框架 - 获取可用存储

我可以在不启动文档选择器并让用户选择目录的情况下以某种方式找出当前可用的存储吗?

我想显示所有存储根,如下所示:

为什么?

实际上我想知道在告诉用户他需要通过文档选择器选择 sd 卡根目录之前是否有可用的 sd 卡...

所以我想要以下:

  1. 检查 SD 卡是否可用
  2. 如果没有,什么也不做
  3. 如果 sd 卡可用,告诉用户我的应用需要权限才能读取 sd 卡,并要求用户通过存储访问框架选择 sd 卡根目录

我想对 USB 记忆棒做同样的事情,但我知道该怎么做(存在广播接收器以在添加 USB 记忆棒时收到通知,我也可以检查 on 是否已经连接)

0 投票
2 回答
1322 浏览

android - 存储访问框架 - 设置本地 DocumentFile 的最后修改日期

我想将文件从内部存储复制或移动到 SD 卡。我通过存储访问框架(SAF)和DocumentFile类来做到这一点......

复制是基于流的,并且DocumentFile没有File设置上次修改日期的类的功能。

我知道,我将文件移动/复制到 sd 卡,所以我知道我创建了一个本地文件。有了这些信息,是否有可能更新基础文件的最后修改日期DocumentFile

似乎您无法在不丢失上次修改日期的情况下将文件从内部存储移动/复制到 sd 卡...

阅读 - 工作

写作 - 不工作

这失败了一个java.lang.UnsupportedOperationException: Update not supported例外......

0 投票
2 回答
975 浏览

android - 使用 Android Storage Access Framework 重命名 Google Drive 文档会导致权限错误

我正在使用 android 的存储访问框架 (SAF) 与文档进行交互。我已经能够毫无问题地查找/读取/写入文档,但是当我尝试使用带有 Google Drive 文档的 DocumentsContract#renameDocument() 进行重命名时遇到了问题。我发布的代码适用于内部存储中的文件。

为了方便起见,我制作了一个示例应用程序并将其推送到 github。您可以在此处找到该代码:https ://github.com/scottTomaszewski/SafExample ,我与文档本身的交互在此类https://github.com/scottTomaszewski/SafExample/blob/master/app/src/main /java/com/example/safexample/SafDocument.java

我在重命名通过谷歌驱动器的 SAF 接口获取的 Uri 时看到的错误是这样的(更易于阅读的版本:https ://github.com/scottTomaszewski/SafExample/blob/master/README.md )

我尝试了各种调用排列

我还应该提一下,我当然可以通过使用 ACTION-CREATE_DOCUMENT 来创建新文档,复制旧文档的内容并删除旧文档来执行重命名,但这并不理想,我也不想使用一种解决方法。这个#renameDocument 应该可以工作。

任何帮助都会很棒!

0 投票
1 回答
860 浏览

android - Android Marshmallow:SAF 写入的文件不会立即写入

我正在使用 SAF(存储访问框架)将文件写入 SD 卡。在 Marshmallow 上,文件的写入和更新实际上有很大的延迟(大约 10 秒)。

当我使用例如:

顺便提一句。当我通过方法检查长度时File.length(),它返回相同的值。

有没有办法立即写出来?或者我可以设置一些监听器吗?否则我必须定期检查尺寸,我不想这样做。实际上,我不想在文件写入后等待 10 秒。

0 投票
1 回答
1815 浏览

android - Correctly delete DocumentFile (respecting the MediaStore)

I have a DocumentFile defined in following two ways:

I can delete a document file from the sd card via following methods:

  1. documentFile.delete();
  2. DocumentsContract.deleteDocument(contentResolver, documentFileUri);

But non of the above methods will delete the corresponding entry from the MediaStore.

What's the correct way to handle that? If I use the ContentProvider for deleting a local file, it will remove the File AND the row from the database (contentResolver.delete(localFileUri, null, null);). I would expect the same to happen if I use the DocumentsContract but it does not happen...

What I want

I want to instandly update the MediaStore. Normally I would call contentResolver.delete(documentFileUri, null, null); but this will fail with an exception that says, that the uri does not support deletions...

Question

Is there a more efficiant way to do it than my workaround?

Workaround

Currently I use following function to instantly update the media store after I deleted a DocumentFile:

0 投票
0 回答
425 浏览

android - 在 ACTION_CREATE_DOCUMENT 之后检测文件是否存在

在我的应用程序中创建文件时,我正在使用 ACTION_CREATE_DOCUMENT 意图。一位用户抱怨他丢失了数据,因为他在没有收到警告的情况下覆盖了现有文件。

1.) 有没有办法查出退回的文件是否存在?

2.) 推荐的工作流程是什么?

0 投票
1 回答
6401 浏览

android - Android - 如何使用新的存储访问框架将文件复制到外部 sd 卡

我正在我的应用程序中实现文件浏览器功能。我知道如何使用 ACTION_OPEN_DOCUMENT_TREE 意图获得外部 sd 卡的持久权限,以及如何使用 DocumentFile 类创建文件夹和删除文件/文件夹。

但是,我找不到将文件复制/移动到外部 SD 卡文件夹的方法。你能指出我正确的方向吗?

0 投票
0 回答
211 浏览

android - Android - 使用 DocumentFile 类的文件操作是否需要提醒 MediaScanner?

我试图遵循源代码并保留这篇文章,但我有点迷路了..

在过去,当我们使用 Java File 类删除或创建媒体文件时,我们必须通知操作系统以将其包含在媒体数据库中或从媒体数据库中删除。

现在我们不得不使用 DocumetFile 类来做一些事情......这个类提供了方法delete()createFile(String mimeType, String name).

我们是否必须再次通知操作系统使用

对于新文件和

用于文件删除或 DocumentFile 类自行完成?

我问的原因是因为 createFile() 方法需要 mimeType 作为输入。让我觉得它会使用 mimeType 来通知媒体数据库。

0 投票
1 回答
325 浏览

android - Android:同时支持 ACTION_GET_CONTENT 和 ACTION_OPEN_DOCUMENT 时避免重复输入

http://developer.android.com/guide/topics/providers/document-provider.html状态:

这表明大多数提供文件的应用程序应该支持这两种意图类型。

但是,当应用程序同时支持ACTION_GET_CONTENT(通过在其意图过滤器中具有匹配的活动)和ACTION_OPEN_DOCUMENT(通过实现文档提供程序)时,它会在例如将文件附加到 Gmail 时显示两次。这是由于文件选择 UI 显示了文档提供者和ACTION_GET_CONTENT匹配器(后者显示在分隔线下方的下方)。

是否可以避免重复显示应用程序以避免混淆用户?

有关问题的示例,请参见下面的屏幕截图和两次显示的 Box 条目:

显示“打开自”对话框中的重复条目的屏幕截图

0 投票
1 回答
1977 浏览

android - Android:“这里不允许元素意图过滤器”里面?

http://developer.android.com/guide/topics/providers/document-provider.html#manifest展示了如何在清单中注册自定义文档提供程序:

这个 <intent-filter> 元素在这里是必需的,但 Android Studio 抱怨:

此处不允许使用元素意图过滤器

并且提供者元素的文档似乎也表明了这一点:

这是 Android Studio 和文档错误还是我遗漏了什么?