4

我目前正在学习开发 Android 应用程序并且有一个相当基本的问题:

假设我想发送一个隐式 Intent 来打开由 URI 链接指定的数据,例如“content://com.mynewauthority:8100/table1”。假设我创建了一个自定义内容提供程序,它在“content://com.mynewauthority:8100/table1”维护一个 SQLite 表。

现在,由于我没有为我的表指定 MIME 类型,而只指定了它的 URI,Android 必须能够以某种方式找出它。但由于它是定制表,我自己决定 MIME 类型,所以据我所知,它可能是“猴子/香蕉”。我似乎在 Content Provider 实现中找不到任何地方,它指定了哪个 MIME 类型与哪个 URI 一起使用,除了 getType(URI uri) 函数似乎没有被 Android 系统用于 Intent 解析。

所以我的问题是:在解析隐式 Intent 期间,Android 如何确定与定制内容提供者的 URI 关联的 MIME 类型?

希望这个问题足够清楚!

4

2 回答 2

3

如果其中Intent有 MIME 类型(请参阅 XGouchet 的答案),则使用该类型。

如果其中Intent没有 MIME 类型,Android 将尝试确定 MIME 类型:

  • 对于 a ,就像您的情况一样,它根据权限ContentProvider调用getType()特定的提供者Uri
  • 对于http:// Uri,它发出一个 HTTPHEAD请求
  • 对于大多数其他东西,它失败了(例如, a file:// Uri
于 2012-04-30T12:25:33.453 回答
0

如果您自己创建意图对象,则可以使用以下命令强制附加到它的 mime 类型:

fileType = "monkey/bananas";
intent.setDataAndType(fileUri, fileType);

仅供参考,android 通常使用MimeTypeMap从文件扩展名中检测 mime 类型,我发现它相当不完整。您可以从MimeTypeMap 类源代码中打印已知的文件扩展名和关联的 mime 类型

于 2012-04-30T12:21:08.097 回答