MediaContentProvider不使用SMS App(但使用WhatsApp,Email,...)

时间:2014-10-07 11:45:52

标签: android cursor android-contentprovider

以下MediaContentProvider(一个简单的图片文件提供商)可以正常使用所有类型的应用,但不适用于我的短信(或更好的彩信)应用。

我知道,短信应用期待Cursor而不是ParcelFileDescriptor,这是否意味着我必须将我的图像文件保存到数据库并从那里检索它?或者有更好的解决方案吗?

public class MediaContentProvider extends ContentProvider
{
public static final String AUTHORITY = "MEDIA";

@Override
public int delete(Uri uri, String selection, String[] selectionArgs)
{
    return 0;
}

@Override
public String getType(Uri uri)
{
    return null;
}

@Override
public Uri insert(Uri uri, ContentValues values)
{
    return null;
}

@Override
public boolean onCreate()
{
    return true;
}

@Override
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder)
{
    return null;
}

@Override
public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs)
{
    return 0;
}

@Override
public ParcelFileDescriptor openFile(Uri uri, String mode) throws FileNotFoundException
{
    String fileName = uri.getLastPathSegment();
    ParcelFileDescriptor pfd = ParcelFileDescriptor.open(new File(getContext().getFilesDir().getAbsolutePath() + "/" + fileName), ParcelFileDescriptor.MODE_READ_ONLY);
    return pfd;
}

}

修改

如建议的那样,这里是FileProvider ...实际上,它会产生相同的行为......正如我所说,我想我必须以某种方式为短信应用提供光标...

public class ImageFileProvider extends FileProvider
{
public static final String AUTHORITY = "ImageFileProvider";

@Override
public ParcelFileDescriptor openFile(Uri uri, String mode) throws FileNotFoundException
{
    String fileName = uri.getLastPathSegment();
    ParcelFileDescriptor pfd = ParcelFileDescriptor.open(new File(getContext().getFilesDir().getAbsolutePath() + "/" + fileName), ParcelFileDescriptor.MODE_READ_ONLY);
    return pfd;
}

}

1 个答案:

答案 0 :(得分:1)

您可能希望在OpenableColumns方法中支持query()

可能需要您授予其访问数据的权限,因为ContentProvider应得到适当保护。

当然希望您从getType()而不是null返回真实的MIME类型。

我仍然是recommend FileProvider,但如果你想自己推出一些内容,this sample app就有了基础知识。