Организация обмена файлами

Для безопасной передачи файла из одного приложения в другое, необходимо настроить работу с URI файлов. Компонент FileProvider генерирует URI для файлов, основываясь на настройках в файле манифеста. В данном уроке рассказывается как добавить FileProvider в приложение и указать файлы, которые вы желаете передавать.

Примечание: класс FileProvider это часть библиотеки поддержки v4. Подробную информацию о библиотеке поддержки читайте в соответствующем разделе.

Указание объекта FileProvider

Для определения объекта FileProvider требуется добавить запись в файл манифеста. Эта запись дает право генерировать URI для данных, а так же содержит имя XML файла, в котором указано какими файлами может поделиться ваше приложение.

Следующий пример показывает, как добавить элемент <provider> в манифест, чтобы определить объект FileProvider, authority и имя XML файла:

В данном примере, атрибут android:authorities описывает URI authority (в данном примере com.example.myapp.fileprovider), который вы можете использовать для генерации URI с помощью FileProvider. В ваших собственных приложениях, authority состоит из значения android:package вашего приложения и строки “fileprovider”. Чтобы узнать больше о значении authority, смотрите раздел URI данных и документацию по атрибуту android:authorities.

Элемент <meta-data> внутри <provider> указывает на XML файл, описывающий директории, которыми вы хотите поделиться. Атрибут android:resource это путь и имя файла, без расширения .xml. Содержимое этого файла мы рассмотрим в следующем разделе настоящего урока.

Указание общих директорий

После добавления объекта FileProvider в манифест, необходимо указать директории, содержащие файлы, которыми вы готовы поделиться. Для указания директорий создайте файл filepath.xml в директории res/xml вашего проекта. В файле добавьте XML элементы для каждой директории. Далее приведен пример файла filepath.xml, который показывает как поделиться подкаталогом директории files/ из вашего внутреннего хранилища:

В данном примере, тег <file-path> содержит каталоги, лежащие внутри директории files/ вашего внутреннего хранилища. Атрибут path указывает на подкаталог images/ из каталога files/. Атрибут name говорит объекту FileProvider добавить сегмент myimages в URI для файлов из каталога files/images/.

Элемент <paths> может включать несколько вложенных элементов, указывающий на разные директории. В дополнение к элементу <files-path>, вы можете использовать элемент <external-path> для указания директорий из внешнего хранилища, а также <cache-path> для указания директории временных файлов. Чтобы узнать больше о вложенных элементах, смотрите раздел FileProvider.

Примечание: XML файл это единственный способ указать директории, которыми вы хотите поделиться. Вы не можете указать директории программно.

Теперь у вас есть полная спецификация FileProvider для генерации URI файлов из директории files/ вашего внутреннего хранилища или из ее поддиректорий. При генерации URI для файла в него будет добавляться значение authority, которое вы указали в элементе <provider> файла манифеста (com.example.myapp.fileprovider), путь myimages/ и имя файла.

Например, если вы описали FileProvider в точности, как в этом уроке, и вы запросите URI для файла default_image.jpg, FileProvider вернет URI:

Добавить комментарий