What is the real difference between ACTION_GET_CONTENT and ACTION_OPEN_DOCUMENT?

Refresh

December 2018

Views

4.2k time

20

I'm having a hard time understanding the difference between ACTION_OPEN_DOCUMENT and ACTION_GET_CONTENT intents when they are used to open an openable document. If I am supporting Andriod before KitKat, which does not support ACTION_OPEN_DOCUMENT, should I just settle with ACTION_GET_CONTENT?

The documentation says this:

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.

Doesn't ACTION_GET_CONTENT also use document providers in KitKat? What would prevent me from having "long term, persistent access" and what exactly does that mean?

Basically, what is the difference between the following two snippets?

ACTION_GET_CONTENT

Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("*/*");

ACTION_OPEN_DOCUMENT

Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
intent.setType("*/*");

1 answers

23

Не ACTION_GET_CONTENT также использовать поставщик документов в KitKat?

Не обязательно. Это зависит от реализации приложения , которое публикует контент. Также обратите внимание , что DocumentProviderэто определенный тип ContentProvider.

Что помешало бы мне иметь «долгосрочные, постоянный доступ»

Uri, Что вы получите обратно из ACTION_GET_CONTENTможет иметь грант временного разрешения с ним для вашего приложения, чтобы иметь возможность читать и / или записать содержимое. Это пособие будет в конечном счете истечет (например, когда ваш процесс завершается). Так, например, сохранение Uriв виде строки в базе данных может быть бессмысленным.

Часть Framework Access Storage включает в себя понятие о том , что поставщик контента может предложить гранты разрешения , которые могут длиться в течение длительного периода ( «долгосрочный, настойчивый»). Хотя нет ничего мешающего приложение от предлагая такие постоянные разрешения с ACTION_GET_CONTENTна уровне API 19+, они будут более распространены с ACTION_OPEN_DOCUMENT.

В принципе, в чем разница между следующими двумя отрывками?

Опыт пользователя будет несколько отличаться, так как ACTION_OPEN_DOCUMENTобеспечивает стандартизованный интерфейс файловый менеджер в стиле, в то время как ACTION_GET_CONTENTтрадиционный Диалог выбора, а затем каким - то приложением конкретных UI.

С вашей точки зрения как потребитель этого контента, ACTION_GET_CONTENTесли вы хотите использовать контент в настоящее время; ACTION_OPEN_DOCUMENTесли вы хотите использовать контент сейчас и позже.