Добавление файла к поставщику контента

Добавление файла к поставщику контента

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

В Android этот протокол автоматизирован за счет определения специальной процедуры для сохранения и извлечения таких файлов. При этом применяется соглашение: ссылка на имя файла хранится в записи с зарезервированным именем столбца _data.

При вставке записи в такую таблицу Android возвращает URI вызывающему процессу. После сохранения записи с помощью этого механизма необходимо использовать его для сохранения файла в нужном месте. Для этого объект ContentResolver может принять URI записи в базе данных и возвратить доступный для записи выходной поток. “За кулисами” Android выделяет внутренний файл и сохраняет ссылку на него в поле _data.

Чтобы добавить в пример с блокнотом возможность хранения изображений для заметок, можно создать еще один столбец по имени _data и выполнить вставку для получения URI. Эта часть протокола продемонстрирована в следующем коде:

ContentValues values = new ContentValues();

values.put("title", "New note");

values.put("note","This is a new note");

// Вставка записи с помощью распознавателя контента.

ContentResolver ContentResolver = activity.getContentResolver();

Uri newUri = contentResolver.insert(Notepad.Notes.CONTENT URI, values);

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

// Использование распознавателя контента для непосредственного получения // выводного потока.

// ContentResolver маскирует доступ к полю data, в котором хранится // реальная ссылка.

OutputStream outStream =

activity.getContentResolver().openOutputStream(newUri); someSourceBitmap.compress(Bitmap.CompressFormat.JPEG, 50, outStream); outStream.close();

После этого выходной поток используется для записи данных.

Поделиться в соц. сетях

Опубликовать в Google Buzz
Опубликовать в Google Plus
Опубликовать в LiveJournal
Опубликовать в Мой Мир
Опубликовать в Одноклассники
Опубликовать в Яндекс

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