我目前正在学习开发Android应用,并且有一个相当基本的问题:
假设我想发送一个隐含的Intent来打开由URI链接指定的数据,例如"内容://com.mynewauthority:8100 /表1&#34 ;.假设我创建了一个自定义内容提供程序,它在" content://com.mynewauthority:8100 / table1"中维护一个SQLite表。
既然我没有为我的表指定MIME类型,但只指定了它的URI,Android必须能够以某种方式解决它。但由于它是一个定制的表,我自己决定MIME类型,所以它可能是" monkey / bananas"据我所知。我似乎无法在Content Provider实现中的任何位置找到指定哪个MIME类型与除了getType(URI uri)函数之外的URI,Android系统似乎没有使用它来进行Intent解析。
所以我的问题是:在解析隐式Intents期间,Android如何找出与定制内容提供商的URI相关联的MIME类型?
希望这个问题足够清楚!
答案 0 :(得分:3)
如果Intent
中有MIME类型(请参阅XGouchet的回答),则使用该类型。
如果Intent
中没有MIME类型,Android会尝试确定MIME类型:
ContentProvider
,就像您的情况一样,它根据权限getType()
的特定提供商上调用Uri
http://
Uri
,它会发出HTTP HEAD
请求file://
Uri
)答案 1 :(得分:0)
如果您自己创建了intent对象,可以使用以下命令强制附加到它的mime类型:
fileType = "monkey/bananas";
intent.setDataAndType(fileUri, fileType);
仅供参考,android通常会使用MimeTypeMap来检测文件扩展名中的mime类型,我发现这些类型相当不完整。您可以从MimeTypeMap class source code
打印已知的文件扩展名和关联的mime类型