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

android - 在 Android 上为云实现 DocumentsProvider 的问题

我制作了自定义文档提供程序实现,其中文件实际存储在服务器上。

我遵循了文档,因此提供程序大部分时间都在工作,但我对某些应用程序有问题,即:

1) Gmail 附加来自我的提供商的文件:最初我的公共 ParcelFileDescriptor openDocument 是这样的:

但这从未与 Gmail 一起使用,我得到了错误的管道损坏。如果我首先以相同的方法(阻塞)下载文件,它会起作用。

原始与大多数其他应用程序一起使用

2) Blackberry Hub - 我无法让它正常工作,因为它似乎在主线程上调用提供程序方法

我会放弃,但我看到 Dropbox 提供商可以与包括 BB 集线器在内的所有应用程序一起使用。

更糟糕的是 :) 例如,Dropbox 似乎可以在下载时显示自己的 UI。

知道如何做到这一点吗?

请注意,我多次检查了文档和几个示例,但仍然无法让提供商使用所有应用程序,我知道某些应用程序可能使用错误,但 Dropbox 证明可以满足所有应用程序

0 投票
0 回答
838 浏览

android - Ionic:如何使用存储访问框架从 Google Drive 上传文件?

我正在使用适用于 Android 和 iOS 平台的 Ionic Framework 开发一个混合应用程序。目前我被困在一个阶段,我希望用户在他们的帖子中添加附件。为了添加我正在使用的特定类型的附件:

  1. cordova-plugin-camera:用于照片和视频
  2. cordova-filechooser( https://github.com/don/cordova-filechooser ):用于文档和文件

现在,我希望用户使用存储访问框架从他们的 Google Drive 帐户添加文件(图像、视频、文档等)。目前,从我的 FileChooser 插件中,我只能看到我设备上的文件。我怎样才能做到这一点?

我在这篇文章中附上了一张图片,以便更清楚。

在此处输入图像描述

0 投票
3 回答
2848 浏览

android - 使用 MTP 通过 Android Storage Access Framework / DocumentProvider 遍历目录层次结构的问题

更新:我最初的问题可能具有误导性,所以我想改写一下:我想通过 Android 的存储访问框架从 MTP 连接的设备遍历层次结构树。我似乎无法做到这一点,因为我得到一个SecurityException声明,即子节点不是其父节点的后代。有没有办法解决这个问题?或者这是一个已知问题?谢谢。

我正在编写一个 Android 应用程序,它尝试使用 Android 的存储访问框架 (SAF) 通过MtpDocumentsProvider. 我或多或少遵循https://github.com/googlesamples/android-DirectorySelection中描述的代码示例,了解如何从我的应用程序启动 SAF Picker,选择 MTP 数据源,然后在onActivityResult中使用返回Uri的遍历层次结构。不幸的是,这似乎不起作用,因为一旦我访问一个子文件夹并尝试遍历它,我总是会得到一个SecurityException说明document xx is not a descendant of yy

所以我的问题是,使用MtpDocumentProvider,我怎样才能成功地从我的应用程序遍历层次结构树并避免这个异常?

具体来说,在我的应用程序中,首先,我调用以下方法来启动 SAF Picker:

Android SAF 选择器随后启动,我看到我连接的设备被识别为 MTP 数据源。我选择所述数据源并Uri从我的onActivityResult

然后,使用返回的Uri,我调用DocumentsContract.buildChildDocumentsUriUsingTree以获取Uri然后我可以使用它来查询和访问树层次结构:

外部 while 循环的第一次迭代成功:调用query返回了一个有效Cursor的我可以遍历。问题是第二次迭代:当我尝试查询Uri恰好是 的子节点的 时rootUri,我得到一个SecurityException说明文档 xx 不是 yy 的后代的信息。

D/MyApp(19241): 节点 uri: content://com.android.mtp.documents/tree/2/document/2/children D/MyApp(19241): docId: 4, name: DCIM, mime: vnd. android.document/directory D/MyApp(19241): node uri: content://com.android.mtp.documents/tree/2/document/4/children E/DatabaseUtils(20944): 写入异常包裹E/DatabaseUtils (20944):java.lang.SecurityException:文档 4 不是 2 的后代

谁能提供一些关于我做错了什么的见解?如果我使用不同的数据源提供程序,例如来自外部存储的数据源提供程序(即通过标准 USB OTG 读卡器连接的 SD 卡),一切正常。

附加信息:我在 Nexus 6P、Android 7.1.1 上运行它,我的应用minSdkVersion是 19。

0 投票
2 回答
378 浏览

android - 如何使用存储访问框架中的 getContentResolver().openFileDescriptor() 将文件从 Dropbox/Drive/Onedrive 复制到特定路径?

我正在尝试将文件从通用托管文件服务作为 Dropbox/Drive/Onedrive 复制到我设备中的特定路径。

我创建了一个工作示例来复制 jpg 文件,但我想要创建的是用于复制以下类型的版本:.docx、.pdf、.pptx、.jpg、.jpeg、.png、.gif、.mp3、 .mp4、.xlsx。

我需要做什么?如何修改我的代码?

谢谢

编辑感谢@CommonsWare,我编写了一个使用此代码获取文件扩展名的解决方案:

编辑 2 在@Greenapps 的帮助下,我实现了这个解决方案:

是否存在获取文件名而不是将其命名为“临时文件”的方法?

编辑 3

0 投票
1 回答
1248 浏览

android - Android 持久化 uri 权限不会在设备重启后持久化

尽管打电话

在文档树 URI 上,该 URI 不会在设备重新启动后保留,尽管该ContentResolver.PersistedUriPermissions属性包含设备重新启动之前请求的 URI。文档树是这样获得的(每个存储访问框架持久权限不起作用):

有什么我想念的吗?这是在模拟器和硬件上的 AOSP Lollipop 上。

0 投票
3 回答
11482 浏览

android - 如何以编程方式将文件移动、复制到 SD?

我正在制作一个 android 应用程序,它允许用户使用 SAF 将一些文件从内部存储传输到外部存储(SD 卡)。

这就是我所说的让用户选择 SD 卡目录的意图。

这是我的 onActivityResult

我正在获取整个 SD 卡的权限,以便我可以随时移动或删除 SD 卡中的任何文件。问题是即使在获得许可后,我也无法移动或删除 SD 卡中的任何文件。

对于 android 5.0 及更高版本,我应该如何将文件从内部存储移动到外部(SD 卡)。

编辑:这是我用来移动文件的代码。

0 投票
0 回答
145 浏览

qpython - startActivityForResultIntent 结果=无

我在 Android 上使用 qpython 并尝试以下操作:

在选择器中选择图像后,结果是:

为什么我不能从中获得 url 结果?

提前致谢!

0 投票
1 回答
1022 浏览

android - 带有附加参数的 Android SAF openOutPutStream

使用经典的 FileSystem API,我们可以获取带有附加参数的输出流以写入文件末尾。

这是我用来访问文件的代码:

经典文件系统 API:

SAF API:

但我在 SAF API 中没有 append 参数。

我们如何使用 SAF API 附加到文件?

0 投票
1 回答
905 浏览

android - ACTION_OPEN_DOCUMENT_TREE 显示空的最近列表

我想为我的应用程序提供 SD 卡的写入权限。我正在尝试使用存储访问框架来获得这些权限。

但是当我使用以下代码启动 Activity 时。

startActivityForResult(new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE), 42);

我得到以下空的最近列表,没有其他选项可以在我的手机中选择内部存储器或 SD 卡(Android 版本 5.1。)

手机截图

而运行 Android 5.1 的模拟器显示的是 SD 卡内存。

模拟器截图

任何人都可以请提出什么问题吗?因为其他几个应用程序(ES Explorer、MP3 编辑器)在我的手机中要求我能够选择 SD 卡的权限。

0 投票
1 回答
278 浏览

android - 存储访问框架/文档树显示空的最近列表

我正在使用存储访问框架使用户授予对 SD 卡的写入权限。我的两台设备在 Android lollipop 和 Marshmallow 上运行良好。但它不适用于我在 Android lollipop 上运行的设备之一。

它显示空的最近列表。

截屏

这就是我开始活动的方式

我尝试使用菜单按钮,但没有用。

是否有任何解决方法使用户授予写入权限/将 SD 卡目录添加到最近列表?因为它适用于其他几个应用程序,例如 ES Explorer。