android如何找出隐式Intent的URI的MIME类型?

时间:2012-04-30 11:59:46

标签: android android-intent mime-types android-contentprovider

我目前正在学习开发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类型?

希望这个问题足够清楚!

2 个答案:

答案 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类型