Обслуживание изображений и других файлов из ContentProvider - PullRequest
3 голосов
/ 28 января 2011

Я искал и нашел вопросы о хранении и получении файлов из ContentProvider, но моя ситуация немного отличается.

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

В настоящее время он работает, но мне нужно сделать копии изображений в кэш, чтобы ParcelFileDescriptor, возвращенный из openFile, былдействительный.Я надеялся, что кто-то может знать, как ссылаться на произвольный ParcelFileDescriptor из файла, поставляемого в комплекте с приложением.Активы, кажется, не способствуют этому.Скорее всего, в Raw это тот же сценарий.

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

@Override
public ParcelFileDescriptor openFile(Uri uri, String mode)
throws FileNotFoundException {
    String fileName = uri.getEncodedPath();
    AssetFileDescriptor afd = getContext().getAssets().openFd(fileName);
    ParcelFileDescriptor pfd = afd.getParcelFileDescriptor();
    return pfd;
}

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

I "решил проблему, скопировав файл в кэш приложения, в котором размещен ContentProvider, а затем вернул ParcelFileDescriptor из кэшированного файла.Это работает просто отлично ... но я в итоге удваиваю размер приложения.

Это суть моего вопроса ... Есть ли способ связать статический файл (любого типа) для обслуживанияиз ContentProvider без необходимости копировать его в кеш.

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

Имеет ли это смысл?: -)

1 Ответ

0 голосов
/ 03 апреля 2011
...