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条目:
答案 0 :(得分:1)
从Supporting devices running Android 4.3 and lower section:
中的同一页面稍微向下一点
ACTION_OPEN_DOCUMENT
意图仅适用于运行Android 4.4及更高版本的设备。如果您希望应用程序支持ACTION_GET_CONTENT
以适应运行Android 4.3及更低版本的设备,则应在清单中为运行Android 4.4或更高版本的设备禁用ACTION_GET_CONTENT
intent过滤器。文档提供者和ACTION_GET_CONTENT
应被视为互斥。如果您同时支持它们,您的应用程序将在系统选择器UI中出现两次,提供两种不同的方式来访问您存储的数据。这会让用户感到困惑。
您引用的部分位于客户端一侧 - 连接到DocumentsProvider
的应用可以同时使用ACTION_GET_CONTENT
和ACTION_OPEN_DOCUMENT
,因此您不再需要Android 4.4及更高版本设备上的ACTION_GET_CONTENT
intent-filter或活动。
他们建议根据版本代码(即bool
)创建values-v19
资源,以便更改清单中的android:enabled
值,禁用或启用基于Android的组件版本