Android: избегайте дублирования записей при поддержке ACTION_GET_CONTENT и ACTION_OPEN_DOCUMENT
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. Это связано с тем, что интерфейс выбора файлов отображает как поставщиков документов, так и ACTION_GET_CONTENT
спички (последний показан ниже под разделителем).
Можно ли избежать этого дублированного показа приложения, чтобы не сбить с толку пользователей?
См. Скриншот ниже и запись Box, отображающуюся дважды для примера проблемы:
1 ответ
Немного ниже на той же странице в разделе Поддержка устройств под управлением Android 4.3 и ниже:
ACTION_OPEN_DOCUMENT
Намерение доступно только на устройствах под управлением Android 4.4 и выше. Если вы хотите, чтобы ваше приложение поддержалоACTION_GET_CONTENT
чтобы приспособить устройства под управлением Android 4.3 и ниже, вы должны отключитьACTION_GET_CONTENT
Фильтр намерений в вашем манифесте для устройств под управлением Android 4.4 или выше. Поставщик документов иACTION_GET_CONTENT
следует считать взаимоисключающими. Если вы поддерживаете их обоих одновременно, ваше приложение будет дважды отображаться в интерфейсе средства выбора системы, предлагая два различных способа доступа к вашим сохраненным данным. Это будет сбивать с толку пользователей.
Раздел, на который вы ссылаетесь, находится на стороне клиента - приложения, подключающиеся к вашему DocumentsProvider
можно использовать как ACTION_GET_CONTENT
а также ACTION_OPEN_DOCUMENT
так что вам больше не нужен ACTION_GET_CONTENT
Интент-фильтр или активность на устройствах Android 4.4 и выше.
Они предлагают создать bool
ресурсы на основе кода версии (т. е. в values-v19
), что позволит вам изменить android:enabled
значение в манифесте, отключение или включение компонентов в зависимости от версии Android.