2

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

ACTION_OPEN_DOCUMENT is not intended to be a replacement for ACTION_GET_CONTENT.
The one you should use depends on the needs of your app:

Use ACTION_GET_CONTENT if you want your app to simply read/import data.
With this approach, the app imports a copy of the data, such as an image file.
Use ACTION_OPEN_DOCUMENT if you want your app to have long term, persistent access
to documents owned by a document provider. An example would be a
photo-editing app that lets users edit images stored in a document provider.

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

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

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

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

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

4

1 回答 1

2

在运行 Android 4.3 及更低版本的支持设备部分的同一页面上稍远一点:

ACTION_OPEN_DOCUMENTIntent 仅在运行 Android 4.4 及更高版本的设备上可用。如果您希望您的应用程序支持ACTION_GET_CONTENT运行 Android 4.3 或更低版本的设备,则应ACTION_GET_CONTENT在清单中为运行 Android 4.4 或更高版本的设备禁用 Intent 过滤器。一个文件提供者,ACTION_GET_CONTENT应该被认为是互斥的。如果您同时支持它们,您的应用程序将在系统选择器 UI 中出现两次,提供两种不同的方式来访问您存储的数据。这会让用户感到困惑。

您所指的部分是在客户端 - 连接到您的应用程序DocumentsProvider可以同时使用ACTION_GET_CONTENTACTION_OPEN_DOCUMENT,因此您在 Android 4.4 及更高版本的设备上根本不需要ACTION_GET_CONTENT意图过滤器或活动。

他们建议bool基于版本代码(即 in values-v19)创建资源,这将允许您更改android:enabledManifest 中的值,禁用或启用基于 Android 版本的组件。

于 2016-04-22T00:53:32.030 回答