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

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

Получение файловых запросов


Для получения запросов на файлы из клиентских приложений и отвечать с помощью URI содержимого, ваше приложение должно обеспечить выбор файлов с помощью специальнойActivity. Клиентские приложения запускают эту Activity с помощью вызоваstartActivityForResult() с Intent содержащим действие ACTION_PICK. Когда клиентское приложение вызывает startActivityForResult(), ваше приложение может вернуть результат в клиентскую программу в виде URI содержимого файла, выбранного пользователем.

Чтобы узнать, как реализовать запрос на получение файла в клиентском приложении, см. урок Запрос файла в android приложении.

Создание активити выбора файла


Чтобы настроить выбор файлов через Activity, начните с указания Activity в вашем манифесте, наряду с фильтром интентов, который соответствует действию ACTION_PICK и категориямCATEGORY_DEFAULT и CATEGORY_OPENABLE. Кроме того, добавьте фильтр MIME типа для файлов вашего приложения, которые будут использоваться в других приложениях. В следующем фрагменте показано, как указать новую Activity и фильтр интента:

 

Определите активити выбора файла в коде

Затем, определите Activity подкласс, который отображает файлы доступные из каталога вашего приложения files/images/ во внутреннем хранилище, и позвольте пользователю выбрать нужный файл. В следующем фрагменте показано, как определить эту Activity и отвечать на выбор пользователя:

 

Ответить на выбор файла


После того, как пользователь выбирает файл, приложение должно определить, какой файл был выбран, а затем сгенерировать URI контента для файла. Поскольку Activity отображает список доступных файлов в ListView, когда пользователь щелкает имя файла система вызывает методonItemClick(), в котором вы можете получить выбранный файл.

В onItemClick(), получите File объект для имени выбранного файла и передайте его в качестве аргумента в getUriForFile(), вместе с авторитетным источником, который вы указали в<provider> элементе для FileProvider. Результирующий URI контента содержит авторитетный источник, сегмент пути соответствующего каталога, содержащего файл (как указано в мета-данных XML), а также имя файла, включая его расширение. Как FileProvider устанавливает соответствие каталогов и сегментов пути на основе XML мета-данных описывается в разделе  Укажите каталоги совместного использования

В следующем фрагменте показано, как определить выбранный файл и получить URI контента для него:

 

Помните, что вы можете сгенерировать только URI контента для файлов, находящихся в каталогах, которые указанны в файле мета-данных, содержащем <paths> элементы, как описано в разделе Укажите каталоги совместного использования. Если вы вызовите getUriForFile() для File в каталоге, который не был указан, то вы получите IllegalArgumentException.

Предоставление разрешений для файла


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

Следующий фрагмент кода показывает, как задать разрешение на чтение файла:

 

Внимание: Вызов setFlags() метода является единственным способом для безопасного предоставления доступа к файлам с помощью разрешения на временный доступ. Избегайте вызова метода Context.grantUriPermission() для URI контента файла, так как этот метод предоставляет доступ, который вы можете отменить только вызвавContext.revokeUriPermission().

Предоставить доступ к файлу запрашивающему приложению


Чтобы предоставить доступ к файлу приложению, которое его просило, передайте Intentсодержащий URI контента и разрешение в setResult(). Когда Activity , которую вы только что определили, завершается, система посылает Intent , содержащий URI контента, в клиентскую программу. Следующий фрагмент кода показывает, как это сделать:

 

Предоставьте пользователям возможность немедленно вернуться в клиентскую программу, как только они выбрали файл. Один из способов сделать это заключается в предоставлении галочки или кнопки Готово . Свяжите метод с кнопкой при помощью android:onClick атрибута. В методе, вызовите finish(). Например:

Совместное использование файлов android-приложениями обновлено: Ноябрь 24, 2015 автором: admin

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*
*
Website