ContentProvider類有兩個方法能夠返回MIME類型:
getType()
你必須給提供實現的必要的方法之一。
getStreamTypes()
如果你的提供器提供了檔案,那麼就期望實現這個方法。
針對錶的MIME類型
getType()方法返回了由內容資源標識(URI)參數返回的描述資料類型的MIME格式中的一個字串。這個URI是被模式化的而不是一個特定的URI;因此,你應該返回跟這個模式比對的與內容資源標識相關聯的資料類型。
對於普通的如text、HTML、JPEG等資料類型,getType()方法應該返回標準的MIME資料類型。在IANA_MIME_Media_Types網站(http://www.iana.org/assignments/media-types/index.html)上列出了這些標準的有效MIME類型。
對於指向表資料的一行或多行的內容資源標識(URI),getType()方法應該用以下Android的供應商指定的MIME格式返回一個MIME類型:
1. 類型部分:vnd
2. 子類型部分:
如果資源標識(URI)模式是針對單行資料的,使用:android.crusor.item/
如果資源標識(URI)模式是針對多行資料的,使用:android.cursor.dir/
3. 指定提供器部分:vnd.<name><type>
你要提供<name>和<type>這兩部分內容。<name>的值應該是全域唯一的,並且<type>的值應該相對URI模式是唯一的。對於<name>使用你的公司名或你應用程式的Android包名是一個好的選擇,對於<type>使用跟URI關聯的標識表的字串是一個好的選擇。
例如,如果一個提供器的許可權是com.example.app.provider,並且它要暴露的表被命名為table1,那麼對於table1中多行的MIME類型是:
vnd.android.cursor.dir/vnd.com.example.provider.table1
對於table1的單行的MIME類型是:
vnd.android.cursor.item/vnd.com.example.provider.table1
針對檔案的MIME類型
如果你提供器提供了檔案,那麼就要實現getStreamTypes()方法。這個方法返回一個針對檔案的MIME類型字串數組,這個數組包含了你的提供器能夠返回給內容資源標識的檔案的檔案類型。你應該通過MIME類型過濾器參數來過濾你提供的MIME類型,以便只返回那些用戶端想要處理的MIME類型。
例如,一個提供.jpg、.png、.gif圖片格式的提供器,如果一個應用程式調用帶有“image/*”(任意格式的圖片)過濾字串的ContentResolver.getStreamTypes()方法,那麼ContentProvider.getStreamTypes()方法就應該返回以下數組:
{ "image/jpeg", "image/png", "image/gif"}
如果應用程式只對.jpg檔案感興趣,那麼調用調用帶有過濾字串的*\/jpeg的ContentResolver.getStreamTypes()方法,ContentProvider.getStreamTypes()方法就應該以下結果:
{"image/jpeg"}
如果你的提供不提供過濾字串中請求的MIME類型,那麼getStreamTypes()方法應該返回null。