2014-10-07 30 views
0

以下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; 
} 

}

+1

什麼「不與我的短信(或更好的彩信)應用程序」是什麼意思?順便說一句,你可能會更好地服務[使用'FileProvider' for this](http://developer.android.com/reference/android/support/v4/content/FileProvider.html),因爲它已經寫入並在Android支持包。 – CommonsWare 2014-10-07 11:49:46

+0

它失敗了......短信應用說「你不能把這個添加到你的消息」,並打開一個空的短信......但我會看看'FileProvider' – prom85 2014-10-07 11:52:25

回答

1

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

可能需要您授予其訪問數據的權限,因爲您的ContentProvider應得到適當保護。

它當然期待您從getType()返回真實的MIME類型,而不是null

我仍然recommend FileProvider,但如果你想自己推出一些東西,this sample app有基本知識。

+0

你沒有按照說明正確使用'FileProvider'。例如,您不需要繼承它。這裏是一個完整的示例應用程序展示使用'FileProvider':https://github.com/commonsguy/cw-omnibus/tree/master/ContentProvider/V4FileProvider – CommonsWare 2014-10-07 12:06:34

+0

好吧,我會檢查... – prom85 2014-10-07 12:07:23

+0

好吧,現在它即使使用短信應用程序,也能按預期工作。非常感謝 – prom85 2014-10-07 12:13:31

相關問題