Добавление файла к поставщику контента
Иногда бывает нужно сохранить в базе данных целый файл. Обычно для этого файл сохраняется на диске, а в базе данных изменяется запись, которая указывает на соответствующее имя файла.
В 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();
После этого выходной поток используется для записи данных.
Добавить комментарий
Для отправки комментария вам необходимо авторизоваться.