Открытие файлов с помощью платформы доступа к хранилищу,Открытие файлов с помощью платформы доступа к хранилищу,Открытие файлов с помощью платформы доступа к хранилищу,Открытие файлов с помощью платформы доступа к хранилищу

В Android 4.4 (уровень API 19) представлена ​​платформа доступа к хранилищу (SAF). SAF позволяет пользователям просматривать и открывать документы, изображения и другие файлы у всех предпочитаемых ими поставщиков хранилищ документов. Стандартный, простой в использовании пользовательский интерфейс позволяет пользователям единообразно просматривать файлы и получать доступ к последним файлам в разных приложениях и поставщиках.

Облачные или локальные службы хранения могут участвовать в этой экосистеме, реализуя DocumentsProvider , который инкапсулирует их услуги. Клиентские приложения, которым требуется доступ к документам провайдера, могут интегрироваться с SAF с помощью нескольких строк кода.

САФ включает в себя следующее:

  • Поставщик документов: поставщик контента, который позволяет службе хранения, такой как Google Drive, раскрывать файлы, которыми она управляет. Поставщик документов реализован как подкласс класса DocumentsProvider . Схема поставщика документов основана на традиционной файловой иерархии, однако то, как ваш поставщик документов физически хранит данные, зависит от вас. Платформа Android включает в себя несколько встроенных поставщиков документов, таких как «Загрузки», «Изображения» и «Видео».
  • Клиентское приложение: пользовательское приложение, которое вызывает действия намерения ACTION_CREATE_DOCUMENT , ACTION_OPEN_DOCUMENT и ACTION_OPEN_DOCUMENT_TREE и получает файлы, возвращаемые поставщиками документов.
  • Средство выбора: системный пользовательский интерфейс, который позволяет пользователям получать доступ к документам всех поставщиков документов, которые удовлетворяют критериям поиска клиентского приложения.

SAF предлагает следующие возможности:

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

Обзор

SAF сосредоточен вокруг поставщика контента, который является подклассом класса DocumentsProvider . В поставщике документов данные структурированы как традиционная файловая иерархия:

модель данных

Рисунок 1. Модель данных поставщика документов. Корень указывает на один документ, который затем начинает разветвление дерева.

Обратите внимание на следующее:

  • Каждый поставщик документов сообщает об одном или нескольких корнях , которые являются отправной точкой для изучения дерева документов. Каждый корень имеет уникальный COLUMN_ROOT_ID и указывает на документ (каталог), представляющий содержимое этого корня. Корни по своей конструкции являются динамическими для поддержки таких вариантов использования, как несколько учетных записей, временные USB-накопители или вход и выход пользователя из системы.
  • Под каждым корнем находится отдельный документ. Этот документ указывает на от 1 до N документов, каждый из которых, в свою очередь, может указывать на от 1 до N документов.
  • Каждый сервер хранилища отображает отдельные файлы и каталоги, ссылаясь на них с помощью уникального COLUMN_DOCUMENT_ID . Идентификаторы документов уникальны и не изменяются после выдачи, поскольку они используются для постоянного предоставления URI при перезагрузке устройства.
  • Документы могут представлять собой либо открываемый файл с определенным типом MIME, либо каталог, содержащий дополнительные документы, с типом MIME_TYPE_DIR .
  • Каждый документ может иметь разные возможности, как описано в COLUMN_FLAGS . Например, FLAG_SUPPORTS_WRITE , FLAG_SUPPORTS_DELETE и FLAG_SUPPORTS_THUMBNAIL . Один и тот же COLUMN_DOCUMENT_ID может быть включен в несколько каталогов.

Поток управления

Модель данных поставщика документов основана на традиционной файловой иерархии. Однако вы можете физически хранить свои данные так, как вам нравится, если у вас есть доступ к ним с помощью API DocumentsProvider . Например, вы можете использовать облачное хранилище на основе тегов для своих данных.

На рис. 2 показано, как приложение для работы с фотографиями может использовать SAF для доступа к сохраненным данным:

приложение

Рисунок 2. Схема работы Storage Access Framework.

Обратите внимание на следующее:

  • В SAF поставщики и клиенты не взаимодействуют напрямую. Клиент запрашивает разрешение на взаимодействие с файлами, то есть на чтение, редактирование, создание или удаление файлов.
  • Взаимодействие начинается, когда приложение (в данном примере приложение для фотографий) запускает намерение ACTION_OPEN_DOCUMENT или ACTION_CREATE_DOCUMENT . Намерение может включать фильтры для дальнейшего уточнения критериев, например «предоставить мне все открываемые файлы, имеющие тип MIME «изображение».
  • Как только намерение сработает, средство выбора системы обращается к каждому зарегистрированному поставщику и показывает пользователю соответствующие корни контента.
  • Средство выбора предоставляет пользователям стандартный интерфейс для доступа к документам, даже если базовые поставщики документов сильно различаются. Например, на рисунке 2 показаны поставщик Google Диска, поставщик USB и поставщик облака.

На рисунке 3 пользователь выбирает папку «Загрузки» в средстве выбора, открытом при поиске изображений. Средство выбора также показывает все корни, доступные клиентскому приложению.

Скриншот выбора папки в средстве выбора системы

Рис. 3. Средство выбора, показывающее папку «Загрузки», выбранную в качестве места поиска.

После того, как пользователь выбирает папку «Загрузки», изображения отображаются. На рисунке 4 показан результат этого процесса. Теперь пользователь может взаимодействовать с изображениями способами, поддерживаемыми поставщиком и клиентским приложением.

Скриншот папки «Загрузки»

Рисунок 4. Изображения, хранящиеся в папке «Загрузки», как они просматриваются в средстве выбора системы.

Написать клиентское приложение

В Android 4.3 и более ранних версиях, если вы хотите, чтобы ваше приложение получало файл из другого приложения, оно должно вызвать такое намерение, как ACTION_PICK или ACTION_GET_CONTENT . Затем пользователь выбирает одно приложение, из которого можно выбрать файл. Выбранное приложение должно предоставлять пользовательский интерфейс, позволяющий пользователю просматривать и выбирать доступные файлы.

В Android 4.4 (уровень API 19) и более поздних версиях у вас есть дополнительная возможность использовать намерение ACTION_OPEN_DOCUMENT , которое отображает управляемый системой пользовательский интерфейс выбора, который позволяет пользователю просматривать все файлы, которые сделали доступными другие приложения. Из этого единого пользовательского интерфейса пользователь может выбрать файл из любого поддерживаемого приложения.

В Android 5.0 (уровень API 21) и более поздних версиях вы также можете использовать намерение ACTION_OPEN_DOCUMENT_TREE , которое позволяет пользователю выбирать каталог для доступа клиентского приложения.

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

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

Дополнительные сведения о поддержке просмотра файлов и каталогов с помощью пользовательского интерфейса средства выбора системы см. в руководстве по доступу к документам и другим файлам .

Дополнительные ресурсы

Для получения дополнительной информации о поставщиках документов воспользуйтесь следующими ресурсами:

Образцы

Видео

,

В Android 4.4 (уровень API 19) представлена ​​платформа доступа к хранилищу (SAF). SAF позволяет пользователям просматривать и открывать документы, изображения и другие файлы у всех предпочитаемых ими поставщиков хранилищ документов. Стандартный, простой в использовании пользовательский интерфейс позволяет пользователям единообразно просматривать файлы и получать доступ к последним файлам в разных приложениях и поставщиках.

Облачные или локальные службы хранения могут участвовать в этой экосистеме, реализуя DocumentsProvider , который инкапсулирует их услуги. Клиентские приложения, которым требуется доступ к документам провайдера, могут интегрироваться с SAF с помощью нескольких строк кода.

САФ включает в себя следующее:

  • Поставщик документов: поставщик контента, который позволяет службе хранения, такой как Google Drive, раскрывать файлы, которыми она управляет. Поставщик документов реализован как подкласс класса DocumentsProvider . Схема поставщика документов основана на традиционной файловой иерархии, однако то, как ваш поставщик документов физически хранит данные, зависит от вас. Платформа Android включает в себя несколько встроенных поставщиков документов, таких как «Загрузки», «Изображения» и «Видео».
  • Клиентское приложение: пользовательское приложение, которое вызывает действия намерения ACTION_CREATE_DOCUMENT , ACTION_OPEN_DOCUMENT и ACTION_OPEN_DOCUMENT_TREE и получает файлы, возвращаемые поставщиками документов.
  • Средство выбора: системный пользовательский интерфейс, который позволяет пользователям получать доступ к документам всех поставщиков документов, которые удовлетворяют критериям поиска клиентского приложения.

SAF предлагает следующие возможности:

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

Обзор

SAF сосредоточен вокруг поставщика контента, который является подклассом класса DocumentsProvider . В поставщике документов данные структурированы как традиционная файловая иерархия:

модель данных

Рисунок 1. Модель данных поставщика документов. Корень указывает на один документ, который затем начинает разветвление дерева.

Обратите внимание на следующее:

  • Каждый поставщик документов сообщает об одном или нескольких корнях , которые являются отправной точкой для изучения дерева документов. Каждый корень имеет уникальный COLUMN_ROOT_ID и указывает на документ (каталог), представляющий содержимое этого корня. Корни по своей конструкции являются динамическими для поддержки таких вариантов использования, как несколько учетных записей, временные USB-накопители или вход и выход пользователя из системы.
  • Под каждым корнем находится отдельный документ. Этот документ указывает на от 1 до N документов, каждый из которых, в свою очередь, может указывать на от 1 до N документов.
  • Каждый сервер хранилища отображает отдельные файлы и каталоги, ссылаясь на них с помощью уникального COLUMN_DOCUMENT_ID . Идентификаторы документов уникальны и не изменяются после выдачи, поскольку они используются для постоянного предоставления URI при перезагрузке устройства.
  • Документы могут представлять собой либо открываемый файл с определенным типом MIME, либо каталог, содержащий дополнительные документы, с типом MIME_TYPE_DIR .
  • Каждый документ может иметь разные возможности, как описано в COLUMN_FLAGS . Например, FLAG_SUPPORTS_WRITE , FLAG_SUPPORTS_DELETE и FLAG_SUPPORTS_THUMBNAIL . Один и тот же COLUMN_DOCUMENT_ID может быть включен в несколько каталогов.

Поток управления

Модель данных поставщика документов основана на традиционной файловой иерархии. Однако вы можете физически хранить свои данные по своему усмотрению, если у вас есть доступ к ним с помощью API DocumentsProvider . Например, вы можете использовать облачное хранилище на основе тегов для своих данных.

На рис. 2 показано, как приложение для работы с фотографиями может использовать SAF для доступа к сохраненным данным:

приложение

Рисунок 2. Схема работы Storage Access Framework.

Обратите внимание на следующее:

  • В SAF поставщики и клиенты не взаимодействуют напрямую. Клиент запрашивает разрешение на взаимодействие с файлами, то есть на чтение, редактирование, создание или удаление файлов.
  • Взаимодействие начинается, когда приложение (в данном примере приложение для фотографий) запускает намерение ACTION_OPEN_DOCUMENT или ACTION_CREATE_DOCUMENT . Намерение может включать фильтры для дальнейшего уточнения критериев, например «предоставить мне все открываемые файлы, имеющие MIME-тип «изображение».
  • Как только намерение сработает, средство выбора системы обращается к каждому зарегистрированному поставщику и показывает пользователю соответствующие корни контента.
  • Средство выбора предоставляет пользователям стандартный интерфейс для доступа к документам, даже если базовые поставщики документов сильно различаются. Например, на рисунке 2 показаны поставщик Google Диска, поставщик USB и поставщик облака.

На рисунке 3 пользователь выбирает папку «Загрузки» в средстве выбора, открытом при поиске изображений. Средство выбора также показывает все корни, доступные клиентскому приложению.

Скриншот выбора папки в средстве выбора системы

Рис. 3. Средство выбора, показывающее папку «Загрузки», выбранную в качестве места поиска.

После того, как пользователь выбирает папку «Загрузки», изображения отображаются. На рисунке 4 показан результат этого процесса. Теперь пользователь может взаимодействовать с изображениями способами, поддерживаемыми поставщиком и клиентским приложением.

Скриншот папки «Загрузки»

Рисунок 4. Изображения, хранящиеся в папке «Загрузки», как они просматриваются в средстве выбора системы.

Написать клиентское приложение

В Android 4.3 и более ранних версиях, если вы хотите, чтобы ваше приложение получало файл из другого приложения, оно должно вызвать такое намерение, как ACTION_PICK или ACTION_GET_CONTENT . Затем пользователь выбирает одно приложение, из которого можно выбрать файл. Выбранное приложение должно предоставлять пользовательский интерфейс, позволяющий пользователю просматривать и выбирать доступные файлы.

В Android 4.4 (уровень API 19) и более поздних версиях у вас есть дополнительная возможность использовать намерение ACTION_OPEN_DOCUMENT , которое отображает управляемый системой пользовательский интерфейс выбора, который позволяет пользователю просматривать все файлы, которые сделали доступными другие приложения. Из этого единого пользовательского интерфейса пользователь может выбрать файл из любого поддерживаемого приложения.

В Android 5.0 (уровень API 21) и более поздних версиях вы также можете использовать намерение ACTION_OPEN_DOCUMENT_TREE , которое позволяет пользователю выбирать каталог для доступа клиентского приложения.

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

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

Дополнительные сведения о поддержке просмотра файлов и каталогов с помощью пользовательского интерфейса средства выбора системы см. в руководстве по доступу к документам и другим файлам .

Дополнительные ресурсы

Для получения дополнительной информации о поставщиках документов воспользуйтесь следующими ресурсами:

Образцы

Видео

,

В Android 4.4 (уровень API 19) представлена ​​платформа доступа к хранилищу (SAF). SAF позволяет пользователям просматривать и открывать документы, изображения и другие файлы у всех предпочитаемых ими поставщиков хранилищ документов. Стандартный, простой в использовании пользовательский интерфейс позволяет пользователям единообразно просматривать файлы и получать доступ к последним файлам в разных приложениях и поставщиках.

Облачные или локальные службы хранения могут участвовать в этой экосистеме, реализуя DocumentsProvider , который инкапсулирует их услуги. Клиентские приложения, которым требуется доступ к документам провайдера, могут интегрироваться с SAF с помощью нескольких строк кода.

САФ включает в себя следующее:

  • Поставщик документов: поставщик контента, который позволяет службе хранения, такой как Google Drive, раскрывать файлы, которыми она управляет. Поставщик документов реализован как подкласс класса DocumentsProvider . Схема поставщика документов основана на традиционной файловой иерархии, однако то, как ваш поставщик документов физически хранит данные, зависит от вас. Платформа Android включает в себя несколько встроенных поставщиков документов, таких как «Загрузки», «Изображения» и «Видео».
  • Клиентское приложение: пользовательское приложение, которое вызывает действия намерения ACTION_CREATE_DOCUMENT , ACTION_OPEN_DOCUMENT и ACTION_OPEN_DOCUMENT_TREE и получает файлы, возвращаемые поставщиками документов.
  • Средство выбора: системный пользовательский интерфейс, который позволяет пользователям получать доступ к документам всех поставщиков документов, которые удовлетворяют критериям поиска клиентского приложения.

SAF предлагает следующие возможности:

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

Обзор

SAF сосредоточен вокруг поставщика контента, который является подклассом класса DocumentsProvider . В поставщике документов данные структурированы как традиционная файловая иерархия:

модель данных

Рисунок 1. Модель данных поставщика документов. Корень указывает на один документ, который затем начинает разветвление дерева.

Обратите внимание на следующее:

  • Каждый поставщик документов сообщает об одном или нескольких корнях , которые являются отправной точкой для изучения дерева документов. Каждый корень имеет уникальный COLUMN_ROOT_ID и указывает на документ (каталог), представляющий содержимое этого корня. Корни по своей конструкции являются динамическими для поддержки таких вариантов использования, как несколько учетных записей, временные USB-накопители или вход и выход пользователя из системы.
  • Под каждым корнем находится отдельный документ. Этот документ указывает на от 1 до N документов, каждый из которых, в свою очередь, может указывать на от 1 до N документов.
  • Каждый сервер хранилища отображает отдельные файлы и каталоги, ссылаясь на них с помощью уникального COLUMN_DOCUMENT_ID . Идентификаторы документов уникальны и не изменяются после выдачи, поскольку они используются для постоянного предоставления URI при перезагрузке устройства.
  • Документы могут представлять собой либо открываемый файл с определенным типом MIME, либо каталог, содержащий дополнительные документы, с типом MIME_TYPE_DIR .
  • Каждый документ может иметь разные возможности, как описано в COLUMN_FLAGS . Например, FLAG_SUPPORTS_WRITE , FLAG_SUPPORTS_DELETE и FLAG_SUPPORTS_THUMBNAIL . Один и тот же COLUMN_DOCUMENT_ID может быть включен в несколько каталогов.

Поток управления

Модель данных поставщика документов основана на традиционной файловой иерархии. Однако вы можете физически хранить свои данные так, как вам нравится, если у вас есть доступ к ним с помощью API DocumentsProvider . Например, вы можете использовать облачное хранилище на основе тегов для своих данных.

На рис. 2 показано, как приложение для работы с фотографиями может использовать SAF для доступа к сохраненным данным:

приложение

Рисунок 2. Схема работы Storage Access Framework.

Обратите внимание на следующее:

  • В SAF поставщики и клиенты не взаимодействуют напрямую. Клиент запрашивает разрешение на взаимодействие с файлами, то есть на чтение, редактирование, создание или удаление файлов.
  • Взаимодействие начинается, когда приложение (в данном примере приложение для фотографий) запускает намерение ACTION_OPEN_DOCUMENT или ACTION_CREATE_DOCUMENT . Намерение может включать фильтры для дальнейшего уточнения критериев, например «предоставить мне все открываемые файлы, имеющие тип MIME «изображение».
  • Как только намерение сработает, средство выбора системы обращается к каждому зарегистрированному поставщику и показывает пользователю соответствующие корни контента.
  • Средство выбора предоставляет пользователям стандартный интерфейс для доступа к документам, даже если базовые поставщики документов сильно различаются. Например, на рисунке 2 показаны поставщик Google Диска, поставщик USB и поставщик облака.

На рисунке 3 пользователь выбирает папку «Загрузки» в средстве выбора, открытом при поиске изображений. Средство выбора также показывает все корни, доступные клиентскому приложению.

Скриншот выбора папки в средстве выбора системы

Рис. 3. Средство выбора, показывающее папку «Загрузки», выбранную в качестве места поиска.

После того, как пользователь выбирает папку «Загрузки», изображения отображаются. На рисунке 4 показан результат этого процесса. Теперь пользователь может взаимодействовать с изображениями способами, поддерживаемыми поставщиком и клиентским приложением.

Скриншот папки «Загрузки»

Рисунок 4. Изображения, хранящиеся в папке «Загрузки», как они просматриваются в средстве выбора системы.

Написать клиентское приложение

В Android 4.3 и более ранних версиях, если вы хотите, чтобы ваше приложение получало файл из другого приложения, оно должно вызвать такое намерение, как ACTION_PICK или ACTION_GET_CONTENT . Затем пользователь выбирает одно приложение, из которого можно выбрать файл. Выбранное приложение должно предоставлять пользовательский интерфейс, позволяющий пользователю просматривать и выбирать доступные файлы.

В Android 4.4 (уровень API 19) и более поздних версиях у вас есть дополнительная возможность использовать намерение ACTION_OPEN_DOCUMENT , которое отображает управляемый системой пользовательский интерфейс выбора, который позволяет пользователю просматривать все файлы, которые сделали доступными другие приложения. Из этого единого пользовательского интерфейса пользователь может выбрать файл из любого поддерживаемого приложения.

В Android 5.0 (уровень API 21) и более поздних версиях вы также можете использовать намерение ACTION_OPEN_DOCUMENT_TREE , которое позволяет пользователю выбирать каталог для доступа клиентского приложения.

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

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

Дополнительные сведения о поддержке просмотра файлов и каталогов с помощью пользовательского интерфейса средства выбора системы см. в руководстве по доступу к документам и другим файлам .

Дополнительные ресурсы

Для получения дополнительной информации о поставщиках документов воспользуйтесь следующими ресурсами:

Образцы

Видео

,

В Android 4.4 (уровень API 19) представлена ​​платформа доступа к хранилищу (SAF). SAF позволяет пользователям просматривать и открывать документы, изображения и другие файлы у всех предпочитаемых ими поставщиков хранилищ документов. Стандартный, простой в использовании пользовательский интерфейс позволяет пользователям единообразно просматривать файлы и получать доступ к последним файлам в разных приложениях и поставщиках.

Облачные или локальные службы хранения могут участвовать в этой экосистеме, реализуя DocumentsProvider , который инкапсулирует их услуги. Клиентские приложения, которым требуется доступ к документам провайдера, могут интегрироваться с SAF с помощью нескольких строк кода.

САФ включает в себя следующее:

  • Поставщик документов: поставщик контента, который позволяет службе хранения, такой как Google Drive, раскрывать файлы, которыми она управляет. Поставщик документов реализован как подкласс класса DocumentsProvider . Схема поставщика документов основана на традиционной файловой иерархии, однако то, как ваш поставщик документов физически хранит данные, зависит от вас. Платформа Android включает в себя несколько встроенных поставщиков документов, таких как «Загрузки», «Изображения» и «Видео».
  • Клиентское приложение: пользовательское приложение, которое вызывает действия намерения ACTION_CREATE_DOCUMENT , ACTION_OPEN_DOCUMENT и ACTION_OPEN_DOCUMENT_TREE и получает файлы, возвращаемые поставщиками документов.
  • Средство выбора: системный пользовательский интерфейс, который позволяет пользователям получать доступ к документам всех поставщиков документов, которые удовлетворяют критериям поиска клиентского приложения.

SAF предлагает следующие возможности:

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

Обзор

SAF сосредоточен вокруг поставщика контента, который является подклассом класса DocumentsProvider . В поставщике документов данные структурированы как традиционная файловая иерархия:

модель данных

Рисунок 1. Модель данных поставщика документов. Корень указывает на один документ, который затем начинает разветвление дерева.

Обратите внимание на следующее:

  • Каждый поставщик документов сообщает об одном или нескольких корнях , которые являются отправной точкой для изучения дерева документов. Каждый корень имеет уникальный COLUMN_ROOT_ID и указывает на документ (каталог), представляющий содержимое этого корня. Корни по своей конструкции являются динамическими для поддержки таких вариантов использования, как несколько учетных записей, временные USB-накопители или вход и выход пользователя из системы.
  • Под каждым корнем находится отдельный документ. Этот документ указывает на от 1 до N документов, каждый из которых, в свою очередь, может указывать на от 1 до N документов.
  • Каждый сервер хранилища отображает отдельные файлы и каталоги, ссылаясь на них с помощью уникального COLUMN_DOCUMENT_ID . Идентификаторы документов уникальны и не изменяются после выдачи, поскольку они используются для постоянного предоставления URI при перезагрузке устройства.
  • Документы могут представлять собой либо открываемый файл с определенным типом MIME, либо каталог, содержащий дополнительные документы, с типом MIME_TYPE_DIR .
  • Каждый документ может иметь разные возможности, как описано в COLUMN_FLAGS . Например, FLAG_SUPPORTS_WRITE , FLAG_SUPPORTS_DELETE и FLAG_SUPPORTS_THUMBNAIL . Один и тот же COLUMN_DOCUMENT_ID может быть включен в несколько каталогов.

Поток управления

Модель данных поставщика документов основана на традиционной файловой иерархии. Однако вы можете физически хранить свои данные по своему усмотрению, если у вас есть доступ к ним с помощью API DocumentsProvider . Например, вы можете использовать облачное хранилище на основе тегов для своих данных.

На рис. 2 показано, как приложение для работы с фотографиями может использовать SAF для доступа к сохраненным данным:

приложение

Рисунок 2. Схема работы Storage Access Framework.

Обратите внимание на следующее:

  • В SAF поставщики и клиенты не взаимодействуют напрямую. Клиент запрашивает разрешение на взаимодействие с файлами, то есть на чтение, редактирование, создание или удаление файлов.
  • Взаимодействие начинается, когда приложение (в данном примере приложение для фотографий) запускает намерение ACTION_OPEN_DOCUMENT или ACTION_CREATE_DOCUMENT . Намерение может включать фильтры для дальнейшего уточнения критериев, например «предоставить мне все открываемые файлы, имеющие тип MIME «изображение».
  • Как только намерение сработает, средство выбора системы обращается к каждому зарегистрированному поставщику и показывает пользователю соответствующие корни контента.
  • Средство выбора предоставляет пользователям стандартный интерфейс для доступа к документам, даже если базовые поставщики документов сильно различаются. Например, на рисунке 2 показаны поставщик Google Диска, поставщик USB и поставщик облака.

На рисунке 3 пользователь выбирает папку «Загрузки» в средстве выбора, открытом при поиске изображений. Средство выбора также показывает все корни, доступные клиентскому приложению.

Скриншот выбора папки в средстве выбора системы

Рис. 3. Средство выбора, показывающее папку «Загрузки», выбранную в качестве места поиска.

После того, как пользователь выбирает папку «Загрузки», изображения отображаются. На рисунке 4 показан результат этого процесса. Теперь пользователь может взаимодействовать с изображениями способами, поддерживаемыми поставщиком и клиентским приложением.

Скриншот папки «Загрузки»

Рисунок 4. Изображения, хранящиеся в папке «Загрузки», как они просматриваются в средстве выбора системы.

Написать клиентское приложение

В Android 4.3 и более ранних версиях, если вы хотите, чтобы ваше приложение получало файл из другого приложения, оно должно вызвать такое намерение, как ACTION_PICK или ACTION_GET_CONTENT . Затем пользователь выбирает одно приложение, из которого можно выбрать файл. Выбранное приложение должно предоставлять пользовательский интерфейс, позволяющий пользователю просматривать и выбирать доступные файлы.

В Android 4.4 (уровень API 19) и более поздних версиях у вас есть дополнительная возможность использовать намерение ACTION_OPEN_DOCUMENT , которое отображает управляемый системой пользовательский интерфейс выбора, который позволяет пользователю просматривать все файлы, которые сделали доступными другие приложения. Из этого единого пользовательского интерфейса пользователь может выбрать файл из любого поддерживаемого приложения.

В Android 5.0 (уровень API 21) и более поздних версиях вы также можете использовать намерение ACTION_OPEN_DOCUMENT_TREE , которое позволяет пользователю выбирать каталог для доступа клиентского приложения.

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

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

Дополнительные сведения о поддержке просмотра файлов и каталогов с помощью пользовательского интерфейса средства выбора системы см. в руководстве по доступу к документам и другим файлам .

Дополнительные ресурсы

Для получения дополнительной информации о поставщиках документов воспользуйтесь следующими ресурсами:

Образцы

Видео