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。