【问题标题】:Android Custom Filetype Content Intent FilterAndroid 自定义文件类型内容意图过滤器
【发布时间】:2022-12-08 20:41:33
【问题描述】:

我现在有两个具有自定义文件类型(扩展名 .ffx 和 .tcb)的应用程序。从 Gmail 应用程序中的附件打开时,Intent 既不包含文件名,也不包含最初分配的自定义 mime 类型(application/freqfinder 和 application/timecardbuddy)。

HOST=(com.google.android.gm.sapi)

方案=内容

PATH=/newendian@gmail.com/message_attachment_external/%23thread-f%3A1736258334946004772/%23msg-f%3A1736258334946004772/0.1

片段=空

MIME=应用程序/八位字节流

如何确保打开了正确的应用程序? Android 甚至不允许用户从多个应用程序中进行选择。

有没有办法从应用程序中拒绝 Intent 以使其正确定向?或者我应该编写代码以从一个应用程序向另一个应用程序发送明确的 Intent 吗?

编辑:一位用户联系我关于他的设备默认的另一个应用程序,因为它也有一个 MIME=application/octet-stream 文件类型。 Android 真的没有机制来理解并非所有应用程序/八位字节流文件都转到同一个应用程序吗?

【问题讨论】:

    标签: android android-intent mime-types intentfilter


    【解决方案1】:

    我现在有两个具有自定义文件类型的应用程序(扩展名 .ffx 和 .tcb)

    自定义文件扩展名在 Android 恕我直言上从未实用过。自六年前的 Android 7.0 以来,它们就非常不切实际。

    从 Gmail 应用程序中的附件打开时,Intent 既不包含文件名,也不包含最初分配的自定义 mime 类型(application/freqfinder 和 application/timecardbuddy)。

    我不知道 Gmail 如何找到这些 MIME 类型。它们不是 on the official roster,也不遵循特定于供应商的 MIME 类型的规则。

    如何确保打开了正确的应用程序?

    您的应用程序需要有一个 <intent-filter> 匹配 Intentcontent 方案和 application/octet-stream MIME 类型)。该应用程序需要尝试读取内容并做出两个或三个决定之一:

    1. 是的,这个流有预期格式的数据,在这种情况下应用程序可以继续使用它
    2. 不,这个流没有预期格式的数据,但恰好与其他格式匹配
    3. 不,这个流没有预期格式的数据,无法识别

      在情况 3 中,您会显示某种“对不起!”错误信息。如果您还选择添加对案例 2 的支持,您可以:

      • 在您的应用程序中显示一条消息,说明用户需要使用其他应用程序(可能带有安装该应用程序的按钮),或者
      • Uri转发给它,包括FLAG_GRANT_READ_URI_PERMISSION(如果需要,FLAG_GRANT_WRITE_URI_PERMISSION)在你的Intent中开始另一个应用程序中的活动(如果你收到ActivityNotFoundException,说明你的其他应用没有安装)

    【讨论】:

    • 是的,很明显 Android 不能很好地处理这个问题。不允许应用程序导出自定义数据吗?供应商特定 MIME 类型的规则是什么?从您的回答来看,您似乎是在说唯一的解决方案是让我的应用程序明确地将数据转发给其他应用程序
    • @NewEndian:“应用程序不允许导出自定义数据吗?” -- 当然,但不清楚这与 Gmail 有什么关系。 “供应商特定 MIME 类型的规则是什么?” -- 我知道有一个 x- 前缀系统,但除此之外,我不清楚细节。 “看来你是说唯一的解决方案是让我的应用程序明确地将数据转发给另一个应用程序”——对于提供应用程序(例如 Gmail)使用通用 MIME 类型的情况,是的。自定义 MIME 类型主要用于 Web 服务器,您可以在其中控制服务器使用的 MIME 类型。
    • 我会问为什么 Gmail 觉得有必要在发送文件时对文件施加任何影响。但感谢您的 x- 建议。我会检查一下
    • @NewEndian:“我会问为什么 Gmail 觉得有必要在发送文件时对文件强加任何东西”——嗯,好吧,MIME 类型起源于电子邮件,大约 30 年前。电子邮件附件包括 MIME 类型,MIME 类型由电子邮件的发件人选择。这些发件人如何做到这一点取决于发送软件,并且可能涉及操作系统之类的东西。但是,对于自定义 MIME 类型,实际上地球上没有电子邮件软件知道它们,默认值通常是 application/octet-stream。如前所述,自定义 MIME 类型主要用于 Web 服务器。
    • 那仍然不能真正解释它。电子邮件软件不必了解构成电子邮件的很多内容。文件扩展名早在电子邮件之前就已使用,并且今天仍在使用,因此在 Android 中推送 MIME 类型没有意义,但也会使它们与扩展名一样不切实际
    猜你喜欢
    • 1970-01-01
    • 2016-11-11
    • 2015-09-11
    • 1970-01-01
    • 2013-05-04
    • 2010-09-12
    • 2021-08-09
    • 2012-07-07
    • 2015-10-01
    相关资源
    最近更新 更多