Android: обмен загруженными файлами - PullRequest
2 голосов
/ 03 апреля 2012

Я работаю над функцией, при которой мое приложение будет загружать файлы с сервера, а затем разрешать пользователю открывать эти файлы во внешних сторонних приложениях (при условии, что у пользователя установлены приложения, которые могут просматривать типы файлов).

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

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

Когда дело доходит до реализации моего пользовательского ContentProvider, янепонятно о нескольких вещах.Учебники, на которые я смотрел, только касались совместного использования данных между двумя

  1. Достаточно ли просто переопределить и реализовать openFile() и реализовать query(), insert() и т. Д. КакМетоды-заглушки «ничего не делать»?
  2. Предполагая, что реализация openFile() - это путь, как я могу подойти к созданию ParcelFileDescriptor из байтового массива?

Примечание:Если это вообще возможно, мне нужно полностью поддерживать API до уровня 3 (Cupcake).

1 Ответ

2 голосов
/ 04 апреля 2012

Я еще немного покопался и, наконец, наткнулся на этот источник для реализации Open Android AttachmentProvider (для их почтового клиента).

Итак, чтобы ответить на мои собственные вопросы:

  1. Похоже, мне нужно реализовать openFile(), getType() и query(). Их реализация query() обеспечивает доступ к столбцам для отображаемого имени, uri, размера файла и столбца '_ID' ( в соответствии с рекомендациями руководства разработчика ).
  2. ParcelFileDescriptor специально предназначены для работы с File с (я думаю, ключ в названии!), Поэтому единственный способ сделать это - записать байтовый массив в файловую систему, а затем создать ParcelFileDescriptor за это File. К счастью, кажется, что я могу написать в личную папку приложения, чтобы другие приложения не связывались с моими файлами.
...