android - ContentProvider:使用ContentProvider.openFile传递的文件的问题设置文件名

时间:2011-03-25 17:14:46

标签: java android image media android-contentprovider

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

0 个答案:

没有答案