以下MediaContentProvider
(一個簡單的圖像文件提供程序)正在與所有類型的應用程序正常工作,但與我的短信(或更好的彩信)應用程序無法正常工作。MediaContentProvider不適用於SMS應用程序(但與WhatsApp,電子郵件,...)
我知道,短信應用程序預計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
......其實,這導致相同的行爲......正如我所說的,我覺得我必須以某種方式提供光標爲SMS應用...
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;
}
}
什麼「不與我的短信(或更好的彩信)應用程序」是什麼意思?順便說一句,你可能會更好地服務[使用'FileProvider' for this](http://developer.android.com/reference/android/support/v4/content/FileProvider.html),因爲它已經寫入並在Android支持包。 – CommonsWare 2014-10-07 11:49:46
它失敗了......短信應用說「你不能把這個添加到你的消息」,並打開一個空的短信......但我會看看'FileProvider' – prom85 2014-10-07 11:52:25