В этом уроке

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

 

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


Когда Android Beam file transfer заканчивает копирование файлов на принимающем устройстве, она посылает уведомление, содержащее 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 file transfer не единственный источник ACTION_VIEW намерения. Другие приложения на принимающем устройстве могут также отправлять Intent с этим действием. Обработка этой ситуации обсуждается в разделе Получить каталог из URI контента

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


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

 

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

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

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

 

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


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

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

 

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

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

 

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

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

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

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

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

 

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

 

Получение файлов с другого android устройства с помощью технологии NFS обновлено: Ноябрь 24, 2015 автором: admin