在实现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;
}
}