Android:在支持ACTION\u GET\u内容和ACTION\u OPEN\u文档时避免重复输入

Android:在支持ACTION\u GET\u内容和ACTION\u OPEN\u文档时避免重复输入,android,android-intent,android-contentprovider,android-fileprovider,storage-access-framework,Android,Android Intent,Android Contentprovider,Android Fileprovider,Storage Access Framework,国家: 这表明大多数提供文件的应用程序都应该支持这两种意图类型 但是当一个应用程序同时支持ACTION\u GET\u CONTENT(通过在其意图过滤器中有一个与之匹配的活动)和ACTION\u OPEN\u DOCUMENT(通过实现一个文档提供者)时,它会显示两次,例如在Gmail中附加一个文件。这是由于文件拾取UI同时显示文档提供程序和操作获取内容匹配程序(后者显示在分隔符下方) 是否有可能避免重复显示应用程序以避免混淆用户 有关问题的示例,请参见下面的屏幕截图和两次显示的框条目: 从稍

国家:

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

但是当一个应用程序同时支持
ACTION\u GET\u CONTENT
(通过在其意图过滤器中有一个与之匹配的活动)和
ACTION\u OPEN\u DOCUMENT
(通过实现一个文档提供者)时,它会显示两次,例如在Gmail中附加一个文件。这是由于文件拾取UI同时显示文档提供程序和
操作获取内容
匹配程序(后者显示在分隔符下方)

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

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


从稍微向下的同一页中:

ACTION\u OPEN\u文档
intent仅在运行Android 4.4及更高版本的设备上可用。如果您希望应用程序支持
ACTION\u GET\u CONTENT
以适应运行Android 4.3及更低版本的设备,您应该在清单中为运行Android 4.4或更高版本的设备禁用
ACTION\u GET\u CONTENT
意图过滤器。文档提供者和
操作获取内容
应视为相互排斥。如果您同时支持这两种方式,您的应用程序将在系统选择器UI中出现两次,提供两种不同的访问存储数据的方式。这会让用户感到困惑

您参考的部分位于客户端-连接到
文档提供者的应用程序可以同时使用
操作获取内容
操作打开文档
,因此在Android 4.4及更高版本的设备上,您不再需要
操作获取内容
意图过滤器或活动


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

谢谢,错过了!我现在看到,“ACTION_OPEN_DOCUMENT无意取代ACTION_GET_内容”是在客户端应用程序的上下文中,但对于提供商应用程序,情况就是这样。
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.