【问题标题】:Multiple MIME types in AndroidAndroid 中的多种 MIME 类型
【发布时间】:2010-12-14 11:01:03
【问题描述】:

有没有办法使用intent.setType() 并提供多种广泛的类型(如图像视频)?

我正在使用ACTION_GET_CONTENT。它似乎只使用逗号分隔的类型。

【问题讨论】:

  • 你能说得更具体点吗? setType() on...什么?有什么用途和目的?等等。
  • 你找到方法了吗?

标签: android android-intent mime-types


【解决方案1】:

在 Android 4.4 中,当使用 Storage Access Framework 时,您可以使用 EXTRA_MIME_TYPES 传递多种 mime 类型。

Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("*/*");
String[] mimetypes = {"image/*", "video/*"};
intent.putExtra(Intent.EXTRA_MIME_TYPES, mimetypes);
startActivityForResult(intent, REQUEST_CODE_OPEN);

【讨论】:

  • 这在 Android 7.0 中不起作用。仅显示视频。
  • @clocksmith 在我的 Nexus 9 和 Android 7.0 上似乎可以正常工作。
  • @clocksmith 似乎在 Android 7.0 模拟器上也能正常工作。有没有什么特殊情况不起作用?看起来这是正确的答案,因为它是官方 API 的一部分。
  • 完美运行。 Android 过滤文件类型的方式。
  • 请注意,EXTRA_MIME_TYPES 不会取代 setType。您仍然需要 setType 使用这种方法。
【解决方案2】:

实际上,支持多种 mime 类型。你试过了吗???

例如:intent.setType("image/*,video/*") 将显示照片和视频...

对我来说它有效。它应该也适合你...

[编辑]:这部分可行,因为并非所有图库应用都选择实现对多种 mime 类型过滤器的支持。

【讨论】:

  • 此解决方案有效...但仅适用于允许两种 mime 类型的应用程序。默认的“画廊”没有。
  • 其实要看你安装的“图库”应用。它们的不同版本与不同的 android ROM 一起分发。
  • 仅在轻微情况下对我有用。相同的图像可能是也可能不是可选的。安卓 5.0.1
【解决方案3】:

抱歉,目前不支持此功能。你有两个选择:

(1) 使用 MIME 类型 */* 并接受用户可以选择的某些事情可能您将无法处理(并为此提供合适的恢复路径);或

(2) 实现您自己的活动选择器,直接调用包管理器以获取可以处理意图的两种 MIME 类型的活动,合并这些列表,并将它们显示给用户。

另外,setType() 根本不适用于逗号分隔的类型。它必须是一种且只有一种 MIME 类型。

【讨论】:

  • 其实支持多种mime-types。你有没有试过???例如:image/*,video/* 将显示照片和视频...
  • @vchelbanster 并非所有设备都支持多种 mimetype。对于像
  • @ShivamPokhriyal 部分同意 - 它不适用于所有应用程序。由于获得复合 Intent 类型的应用程序需要处理多种 mime 类型才能使其正常工作,因此并非所有应用程序(如图库应用程序)都能正常工作,这可能会产生一种印象,即它依赖于操作系统版本。事实上,需要处理多种 mime 类型的是应用程序的创建者。所以是的 - 这是有限的支持。看我的回答。
  • @vchelbanster 是的,起初我觉得这与操作系统版本有关。后来我发现如果您的设备没有处理此类意图的应用程序,那么就会出现问题。
【解决方案4】:

对我来说最有效的是:

intent.setType("*/*");
intent.addCategory(Intent.CATEGORY_OPENABLE);


你可以像这样添加几种 mime 类型

intent.setType("image/*|application/pdf|audio/*");

但意图选择器将仅显示可以处理图像的应用程序,因为它是 mime 类型字符串中的第一个。

但是,如果您安装了文件管理器(我使用 CyanogenMod 文件管理器进行了测试),您可以选择音频、pdf 或图像文件。

如果音频 mime 类型是第一个,像这样:

intent.setType("audio/*|image/*|application/pdf");

意图选择器将仅显示处理音频的应用程序。
再次使用文件管理器,您可以选择图像、pdf 或音频。

【讨论】:

    【解决方案5】:

    如果你用 | 分隔,你可以传递多个 mime 类型

    Intent.setType("application/*|text/*");
    

    【讨论】:

      【解决方案6】:

      我的分号工作。

      例子:

      intent.setType("image/*;video/*")
      

      sIntent.putExtra("CONTENT_TYPE", "image/*;video/*"); 
      

      【讨论】:

      • 您可以使用Intent.EXTRA_MIME_TYPES 常量来代替硬编码的“CONTENT_TYPE”字符串。你也可以传递一个字符串数组来代替分号。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-10-18
      • 1970-01-01
      • 2021-10-23
      • 2012-04-01
      • 2021-11-20
      • 2011-08-21
      • 2014-06-16
      相关资源
      最近更新 更多