Передача файлов Android Beam копирует файлы в отдельный каталог на принимающем устройстве. Он также сканирует скопированные файлы с помощью Анализатора Медиа-файлов Android, и добавляет записи для медиа-файлов вMediaStore . Этот урок покажет вам, как реагировать, когда копирование файла будет завершено, и, как найти скопированные файлы на принимающем устройстве.

Ответить на запрос отображения данных


Когда передача файлов Android Beam заканчивает копирование файлов на принимающем устройстве, она посылает уведомление, содержащее Intent с действием ACTION_VIEW, MIME-типом первого файла, передача которого завершилась, и URI, который указывает на первый файл. Когда пользователь нажимает на уведомление, это интент посылается в систему. Чтобы ваше приложение могло ответить на это интент, добавьте <intent-filter> элемент для <activity> элементаActivity , которая должна реагировать. В <intent-filter> элемент, добавьте следующие дочерние элементы:

<action android:name="android.intent.action.VIEW" />
Соответствует ACTION_VIEW интенту, отправленному уведомлением.
<category android:name="android.intent.category.CATEGORY_DEFAULT" />
Соответствует Intent , который не имеет явной категории.
<data android:mimeType="mime-type" />
Соответствует MIME-типу. Укажите только те типы, которые ваше приложение может обрабатывать.

Например, следующий фрагмент показывает, как добавить фильтр интентов, который запускает деятельность com.example.android.nfctransfer.ViewActivity: 

 

Примечание: Передача файлов Android Beam не единственный источник ACTION_VIEWинтента. Другие приложения на принимающем устройстве могут также отправлять Intent с этим действием. Обработка этой ситуации обсуждается в разделе Получить каталог из URI контента.

Запросить права доступа


Чтобы прочитать файлы, которые передача файлов Android Beam копирует на устройство, запросите разрешение READ_EXTERNAL_STORAGE. Например:

 

Если вы хотите скопировать переданные файлы в собственное хранилище вашего приложения, запросите вместо этого разрешение WRITE_EXTERNAL_STORAGE . WRITE_EXTERNAL_STORAGEвключает в себя READ_EXTERNAL_STORAGE.

Примечание: В Android 4.2.2 (API уровень 17), разрешение READ_EXTERNAL_STORAGE проверяется только если пользователь хочет это делать. Будущие версии платформы возможно будут требовать данное разрешение для всех случаев. Для обеспечения прямой совместимости, запросите разрешения сейчас, прежде чем оно будет требоваться.

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

Получить каталог со скопированными файлами


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

Чтобы получить схему для URI, вызовите Uri.getScheme(). Следующий фрагмент кода показывает, как определить схему и обработать URI соответственно:

 

Получить каталог из URI файла

Если входящий Intent содержит URI файла, URI содержит абсолютное имя файла, в том числе полный путь к каталогу и имя файла. Для передача файлов Android Beam, путь к каталогу указывает на расположение других передаваемых файлов, если таковые имеются. Чтобы получить путь к каталогу, получите часть URI относящуюся к пути, которая содержит весь URI, кроме file:префикса. Создайте File из это части, содержащей путь, а затем получите путь к каталогу из родительского File:

 

Получить каталог из URI контента

Если входящий Intent содержит URI контента, URI может указывать на каталог и имя файла, сохраненного в MediaStore поставщике контента. Вы можете определить URI контента дляMediaStore путем проверки авторитетного источника данного URI. URI контента для MediaStoreможет прийти от передачи файлов Android Beam или из другого приложения, но в обоих случаях вы можете получить имя каталога и файла для этого URI.

Вы также можете принять входящее ACTION_VIEW интент содержащее URI контента для другого контент-провайдера, а не только для MediaStore. В этом случае, URI контента не содержитMediaStore в имени авторитетного источника, и URI контента обычно не указывают на каталог.

Примечание: Для передачи файлов Android Beam, вы получаете URI контента в ACTION_VIEWинтент, если первый входящий файл имеет MIME-тип «audio/*», «image/*», или «video/*», указывая, что файл является медиафайлом. Передача файлов Android Beam индексирует медиафайлы, запуская Меди Анализатор для каталога, в котором он хранит передаваемые файлы. Сканер файлов записывает результаты в MediaStore контент-провайдер, а затем он передает URI контента первого файла обратно в передачу файлов Android Beam. Этот тот URI контента, который вы получите в уведомлении Intent. Для получения каталога первого файла, извлеките его из MediaStore используя URI контента.

Определить поставщика контента

Чтобы определить, можно ли получить каталог файла из содержимого URI, определите контент-провайдера, связанного с URI, вызвав Uri.getAuthority() для получения авторитетного источника. Есть два возможных значения:

MediaStore.AUTHORITY
URI для файла или файлов, отслеживаемого MediaStore. Получите полное имя файла изMediaStore, и получите каталог из имени файла.
Любое другое значение авторитетного источника
URI контента от другого провайдера контента. Отобразите данные, связанные с URI контента, но не получайте из него каталог.

Чтобы получить каталог для MediaStore URI контента, выполните запрос, который задает входящий URI контента в качестве Uri аргумента и столбец MediaColumns.DATA для отображения. Возвращенный Cursor содержит полный путь и имя файла, представленного URI. Этот путь также содержит все другие файлы, которые передача файлов Android Beam просто скопировала на устройство.

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

 

Чтобы узнать больше о получении данных от поставщика информации, см. раздел Получение данных от поставщика.

Получение файлов с другого android устройства обновлено: Февраль 5, 2016 автором: admin

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

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

*
*
Website