问题标签 [document-provider]

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 回答
144 浏览

android - 我的 DocumentsProvider 如何访问用于启动文件选择器的意图数据

我正在实现一个自定义 DocumentsProvider。当使用标准 Android 协议访问文件选择器时,应用程序可以提供他们感兴趣的多种 mime 类型,然后请求文件选择器执行以下操作:

当文件选择器打开时,会显示我的自定义文档提供程序。我在该类中需要做的是能够检测到应用程序存储在上面的“putExtra”行中的 mime 类型列表是什么,因此我可以在文档提供程序的“queryChildDocuments”方法中适当地加载光标。

如何从 DocumentsProvider 中获取用于启动文件选择器的意图中的数据?

0 投票
1 回答
84 浏览

android - 是否可以仅在我的应用程序中提供我自己的文档提供程序?

这是一个非常简短的答案,我找不到答案,不在文档中,也不在互联网上的任何地方:

在 Android 上,应用程序可以让用户从中选择文件,以从其他应用程序中进行选择。例如,谷歌照片应用程序允许从中选择照片文件。这是通过实现DocumentProvider来完成的。

我想问是否可以仅向我的应用程序本身提供我的应用程序的内容。

这在提供照片选择的情况下会有所帮助,例如,仅与应用程序本身相关。

0 投票
2 回答
365 浏览

android - DocumentProvider 无权拥有 ContentProvider

我的应用程序有 2 种类型的提供程序

基本通信流程是第 3 个应用程序向 DP 请求一些信息,DP 向 CP 请求此信息并将信息返回给第 3 个应用程序。

假设我们使用 Microsoft Word/Excel 从 DocumentProvider 获取一些数据。这是应用程序之间通信流程的方案:

Word < ------- > Document Provider < ---- error here ---- > ContentProvider

问题是 DocumentProvider 无权访问它自己的 ContentProvider。我的意思是 DP 和 CP 在 1 个应用程序中,但它们在不同的进程中运行。

错误是:

DP:

CP:

0 投票
4 回答
2395 浏览

android - 使用 ACTION_GET_CONTENT 或 OPEN_DOCUMENT 从 Google 相册提供商处挑选

我不知道为什么会发生这种情况,但我无法从 Google 照片提供商那里挑选图片。在 API 27 上进行测试。

使用 ACTION_GET_CONTENT

如果我使用:

  • 我可以在提供商中看到 Google 相册
  • 我可以浏览到一些图片并选择它
  • 然后我被引导回提供者列表(而不是我的应用程序),就好像提供者在 try-catch 中崩溃了一样

当我打开照片提供程序并浏览文件夹时,我会看到很多:

当我点击图片时,我看到了这些:

使用 ACTION_OPEN_DOCUMENT

在这种情况下,我什至在提供程序抽屉中都看不到 Google 相册。

问题

我该如何解决这个问题,最好使用 ACTION_GET_CONTENT?

0 投票
0 回答
920 浏览

android - 在 ExoPlayer 中使用缓存来保存流式视频

更新:

我找到了这篇文章,其中详细说明了我所看到的完全相同的问题。事实证明,我在 DocumentsProvider 中使用 Pipe 方法从 DropBox 流式传输内容意味着 ExoPlayer 不提前知道文件的大小,因此默认情况下不会将其保存到缓存中。

所以我最终做了我认为作者所做的事情 - 我为这些情况创建了一个自定义 CacheDataSource ,它改变了该类的 open() 方法中的 DataSpec.flags 变量:

不是最佳解决方案,我还在另一篇文章中附和,要求提供更受支持的方式来指示应设置此标志。

但至少现在我的流媒体文件被保存在缓存中。


我正在为 ExoPlayer2 实现一个客户 CacheDataSourceFactory,以便实现一个缓存来存储流式传输到 ExoPlayer 的视频。

我在这里查看了几篇文章,这篇文章有助于获得将视频缓存到我选择的目录中的一般方法。

我注意到在处理解析为我的自定义 DocumentsProvider 的 URI 时,CacheDataSourceFactory 定义的缓存仅用于存储看起来像“指针”或“索引”文件(“cached_content_index.exi”)的内容。在该文件中,我看到了由我的自定义 DocumentsProvider 流式传输的视频的 URI。但是实际的视频不在缓存中。

这是我的 Provider 的相关部分,它非常简单:

和 TransferThread:

再一次 - 在这种情况下,ExoPlayer 似乎对它从 DocumentsProvider 接收的 ParcelFileDescriptor 非常满意 - 它接收流向它的字节并播放视频。我只是没有看到视频文件最终在缓存中。

我还尝试了一个示例,从我的 Google Drive 流式传输视频(它使用 SAF 的开箱即用文档提供程序),这一次视频确实在缓存中结束。

由于它们都使用相同的 MediaSource 实例 - Google Docs 提供程序必须采用一种方法,以便 ExoPlayer 知道将生成的流式视频放置在我的自定义 Dropbox DocumentsProvider 没有执行的缓存中。

有谁知道如何获取管理对 Google Docs 访问权限的 SAF 附带的 DocumentsProvider 的源代码?我想看看它在 openDocument() 方法中做了什么。

Dropbox 提供商在其 ParcelFileDescriptor 中使用管道这一事实是 ExoPlayer 无法处理的吗?

其他想法?

0 投票
0 回答
253 浏览

android - 使用 ProviderTestRule 测试 DocumentProvider

我有一个 DocumentProvider,它由磁盘上的文件支持,我想用仪器测试进行测试。不幸的是,我找不到推荐的方法来做到这一点。在文档中ProviderTestCase2,似乎它将与IsolatedContext.

这样做的新方法似乎是ProviderTestRule,但我无法让它与任何工作DocumentProvider

我的清单:

我的仪器测试:

当我运行测试时,它会在初始化时引发异常ProviderTestRule

我已经尝试了 Provider 的所有排列exportedpermission但无济于事。ProviderTestRule 不是这里的路吗?我用错了吗?还是某处有错误?

0 投票
1 回答
353 浏览

android - Android DocumentProvider 崩溃 Files-App / DocumentsUI

嘿,我在使用 DocumentProvider 提供文档时遇到问题

实际上我试图提供一个静态文件,但如果我打开我的文件应用程序并发生以下异常。Files-App 正在崩溃,但如果我试图在我的提供程序中只显示目录,我的代码就可以工作。我做错了什么?我确实为看到 DEFAULT_FILE_PROJECTION 的文档设置了所有必填字段,但在我在文件应用程序中选择我的提供程序后它仍然崩溃

碰撞

这是我正在设置所有必需字段的代码。如果我使用 MimeType Directory 尝试相同的代码,它可以工作

0 投票
1 回答
18 浏览

c# - 首次启动后如何强制 QueryRoots 在 Xamarin 应用程序上触发,存储提供程序

我正在尝试按照此处的示例实现 Xamarin 存储提供程序。

https://github.com/xamarin/monodroid-samples/tree/master/StorageProvider

问题是我希望用户在呈现根文件夹之前登录。

用于查询根的方法如下:

public override ICursor QueryRoots(string[] projection)

这在应用程序首次启动时被调用,但随后似乎没有被调用。

如果我立即登录(硬编码凭据),这可以正常工作。但是,如果我打开应用程序以便手动添加一些登录详细信息,则不会再次调用它,因此不会重新呈现正确的根。

有没有人知道我如何强制 Android 再次重新调用此方法以刷新此列表?

0 投票
1 回答
43 浏览

android - 使用带有 EXTRA_INITIAL_URI 和 file:// Uri 的 ACTION_OPEN_DOCUMENT

是否可以使用Intent.ACTION_OPEN_DOCUMENT file:// 格式的 Uri 作为DocumentsContract.EXTRA_INITIAL_URI额外的,让 DocumentsProvider 在文件的位置开始导航?

在我的应用程序中,我为用户提供了使用自定义设置文件的选项,当他选择此选项时,示例默认文件将在应用程序的数据文件夹中创建(由 返回getExternalFilesDir)。

选择自定义文件时,我希望 DocumentsProvider 使用 . 打开当前所选文件所在的文件夹EXTRA_INITIAL_URI。如果某个文件之前选择了 Intent,则没有问题ACTION_OPEN_DOCUMENT,因为返回的 Uri 是content://格式的。

在用户第一次选择文件之前存在问题,并且只有创建默认自定义文件的 Uri 可用。文件通过使用File.createNewFile返回的目录中的使用创建Context.getExternalFilesDir,并使用使用生成Uri Uri.fromFile(file),从而产生file://格式Uri。

这是一个简单的示例代码:

创建自定义文件。像返回 Urifile:///storage/emulated/0/Android/data/com.example.testsapp/files/customFile.txt

让用户选择一个自定义文件:

当 fileUrifile://格式化时,DocumentsProvider 将不会在文件目录中打开,而是显示默认目录。用户选择新的自定义文件后,onActivityResult方法将提供一个新的 Uri,如content://com.android.externalstorage.documents/document/primary%3AAndroid%2Fdata%2Fcom.example.testsapp%2Ffiles%2FcustomFile.txt

当使用此 Uri withpickNewFile方法时,它将在文件目录中打开。

有没有办法将file://Uricontent://类型转换为 Uri 类型?