Я столкнулся со следующей проблемой при реализации ContentProvider для доставки изображений, хранящихся в области личных данных приложения в Android-проекте:
Файлы, возвращаемые реализацией ниже, имеют полный абсолютный путь к сохраненным изображениям как имя файла, которое выглядит как
_data_data_com.mypackage.imageprovider_app_images_123456789.jpg
где app_images - это имя каталога, в котором изображения хранятся приложением, а 123456789.jpg - это фактическое имя файла.
Теперь у меня вопрос: как сделать так, чтобы ContentProvider устанавливал только фактическое имя файла (или, альтернативно, указанное мной имя файла) для доставленных изображений?
Это должно быть возможно, так как, например, встроенные провайдеры в Android удается доставить только фактическое имя файла для изображения.
В таблице базы данных есть столбцы для _id, filename и _data, где _data содержит абсолютный путь к изображению в файловой системе.
Любые намеки очень высоко ценятся :)
Заранее спасибо, snowcrash123
Вот соответствующие части моего текущего ContentProvider:
@Override
public Cursor query(Uri uri, String[] projection, String selection,
String[] selectionArgs, String sortOrder)
{
final SQLiteQueryBuilder queryBuilder = new SQLiteQueryBuilder();
queryBuilder.setTables(PhotosTable.TABLE_NAME);
switch (URI_MATCHER.match(uri))
{
case PHOTO_DIR:
if (sortOrder == null)
{
sortOrder = PhotosDirectory.DEFAULT_SORT_ORDER;
}
break;
case PHOTO_ID:
queryBuilder.appendWhere(IPhotoColumns.FILENAME + "="
+ uri.getPathSegments().get(1) + " AND ");
break;
default:
throw new IllegalArgumentException("Unknown URI " + uri);
}
if (!mDb.isOpen())
{
assignWritableDb();
}
return queryBuilder.query(mDb, PhotosDirectory.ALL_COLUMNS,
selection, selectionArgs, null, null, sortOrder);
}
@Override
public ParcelFileDescriptor openFile(Uri uri, String mode)
{
if (URI_MATCHER.match(uri) != PHOTO_ID)
{
throw new IllegalArgumentException(
"operation only permitted for single file");
}
try
{
return openFileHelper(uri, mode);
}
catch (FileNotFoundException e)
{
return null;
}
}