为什么要使用ContentProvider.getType()来获取MIME类型?

15

在查看内容提供者时,我对于getType()方法的典型用法不太清楚。API文档中关于实现此方法的说明是:

这使得[应用程序]在分派意图时检索URI的MIME类型成为可能。

有人能描述一个使用它会特别有用的典型案例吗?

2个回答

19
例如,您正在编写图片库的内容提供程序。您应该在getType()方法中说明您提供图片 - jpg或png。因此,当用户启动图库时,它将能够显示内置图片和由您的内容提供程序提供的图片。
在伪代码中,contentProvider的用户会执行以下操作:
List contentProviders = getProviders();
List resultProviders;
final Type type = Type.JPG;
for (ContentProvider provider : contentProviders) {
  if (type == provider.getType()) {
     resultProviders.add(provider);
  }
}

这是伪代码,但我希望你能理解。


但是,getType()返回的MIME类型实际上如何用于实现这一点? - rogerkk
所以在这种情况下,您将获得系统中所有提供程序的列表,并过滤它们返回的数据类型,例如显示设备上所有可用的JPG图像浏览器?抱歉需要这样详细解释,只是想确保我完全理解。 :) - rogerkk
没错,就是这样。我不确定这是否是你随时要编写的代码,但展示概念是很好的。 - Vladimir Ivanov
@VladimirIvanov 如果自定义ContentProvider没有被导出,那么呢?它会在图库中显示图片吗? - Malwinder Singh
1
我不理解这个例子。要使用 getType,你需要自己传递一个 uri,而这并不是你所拥有的东西。 - Peppe L-G

0

据我理解,一个使用案例可能如下:

应用程序A包含内容提供程序。应用程序B使用该内容提供程序从应用程序A检索所有数据项。然后用户在应用程序B中选择其中之一,并且之后应启动应用程序A中的活动以显示/编辑/删除所选数据项。因此,应用程序B创建一个意图,并为了确保应用程序A中的活动处理它,您需要将意图的(mime-)类型设置为uri的mime类型(应用程序A中的显示/编辑/删除活动已将此mime类型添加到其意图过滤器中)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接