Какова реальная разница между ACTION_GET_CONTENT и ACTION_OPEN_DOCUMENT?

Мне сложно понять разницу между ACTION_OPEN_DOCUMENT и ACTION_GET_CONTENT намерениями , когда они используются для открытия открытого документа. Если я поддерживаю Andriod перед KitKat, который не поддерживает ACTION_OPEN_DOCUMENT, я должен просто установить с помощью ACTION_GET_CONTENT?

В документации говорится следующее:

ACTION_OPEN_DOCUMENT не предназначен для замены ACTION_GET_CONTENT. Тот, который вы должны использовать, зависит от потребностей ваше приложение:

  • Используйте ACTION_GET_CONTENT, если вы хотите, чтобы ваше приложение просто читало/импортировало данные. При таком подходе приложение импортирует копию данных, таких как файл изображения.
  • Используйте ACTION_OPEN_DOCUMENT, если вы хотите, чтобы ваше приложение долгосрочный, постоянный доступ к документам, принадлежащим документу поставщик. Примером может служить приложение для редактирования фотографий, которое позволяет пользователям редактировать изображения, хранящиеся в поставщике документов.

Не использует ли ACTION_GET_CONTENT поставщиков документов в KitKat? Что мешает мне иметь "долгосрочный, постоянный доступ" и что именно это означает?

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

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

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

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

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

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

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

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

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

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