以下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;
}
}
答案 0 :(得分:1)
您可能希望在OpenableColumns
方法中支持query()
。
可能需要您授予其访问数据的权限,因为ContentProvider
应得到适当保护。
当然希望您从getType()
而不是null
返回真实的MIME类型。
我仍然是recommend FileProvider
,但如果你想自己推出一些内容,this sample app就有了基础知识。