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 сопоставители (последние показаны ниже под разделителем).

Можно ли избежать дублирования показа приложения, чтобы не сбивать пользователей с толку?

См. приведенный ниже снимок экрана и запись в поле, отображаемую дважды, в качестве примера проблемы:

Скриншот с повторяющейся записью в диалоговом окне




Ответы (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.

person ianhanniballake    schedule 22.04.2016
comment
Спасибо, пропустил это! Теперь я вижу, что ACTION_OPEN_DOCUMENT не предназначен для замены ACTION_GET_CONTENT в контексте клиентского приложения — для приложения-поставщика, однако это так. - person fornwall; 22.04.2016