Android:支持ACTION_GET_CONTENT和ACTION_OPEN_DOCUMENT时避免重复输入

时间:2016-04-22 00:50:41

标签: android android-intent android-contentprovider android-fileprovider storage-access-framework

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条目:

Screenshot showing duplicate entry in the Open from dialog

1 个答案:

答案 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_CONTENTACTION_OPEN_DOCUMENT,因此您不再需要Android 4.4及更高版本设备上的ACTION_GET_CONTENT intent-filter或活动。

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