【问题标题】:Handle ics/vcs files in my Android app, correct Intent Filter在我的 Android 应用程序中处理 ics/vcs 文件,更正 Intent Filter
【发布时间】:2012-03-08 04:55:36
【问题描述】:

我已经看到这个问题被问了 100 多次,但没有一个答案对我有用。我希望我的应用程序能够处理所有带有 ics 或 vcs 扩展名的文件,*无论它们来自何处。 *除了,如果它们来自 http/https,我不想自己下载它们,我只想让浏览器至少让用户保存它们,然后用我的应用程序打开。目前浏览器提示“此手机不支持内容”。

这是我目前拥有的,但我一直在尝试一切:

        <intent-filter >
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.BROWSABLE" />
            <category android:name="android.intent.category.DEFAULT" />
            <data android:host="*" />
            <date android:mimeType="text/calendar" />
            <data android:scheme="https" />
        </intent-filter>

通过上述内容,当我单击来自我的服务器的 https 链接并且我知道我的服务器正在发送文本/日历 mime 类型时,机器人会询问他们想要使用什么应用程序来打开链接。该列表包含我的应用程序或浏览器。如果我选择我的应用程序,它会运行我的活动并为我提供 Uri。我希望浏览器下载文件,但我不想自己下载它......其他文件类型的工作方式相同,图像,pdf等。如果我选​​择浏览器,它会开始下载但然后停止出现“此手机不支持的内容”错误。

我也试过这个:

        <intent-filter >
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <data android:host="*" />
            <data android:scheme="file" />
            <data android:pathPattern=".*\\.ics" />
        </intent-filter>

还尝试将方案设置为“内容”,以及我在 SO 和其他地方发现的许多其他变体。

【问题讨论】:

    标签: android mime-types file-extension intentfilter


    【解决方案1】:

    您应该考虑到浏览器正在为二进制文件实现这种下载行为,并且您不能通过意图过滤器来更改它。

    其他应用程序(如 pdf 查看器)声明的意图过滤器与您的第二种方法相同(文件扩展名除外)。

    因此,我建议您自己下载文件。因为它只需要几行代码,所以这应该不是什么大问题。

    【讨论】:

    • 我正要自己回答这个问题,但很高兴有人先回答了这个问题。虽然我不喜欢这个设计,但我认为你是正确的,那就是“就是这样”。我不同意“它只需要几行代码”,而不是以一种可以处理中断、活动重启、屏幕旋转等的稳健方式来完成它。但我同意这就是答案,不管我喜欢不喜欢。看起来真的很奇怪,特别是因为浏览器必须访问网络服务器才能获取 mime 类型,而现在我必须再次下载它(似乎也可能是 cookie 的问题)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-21
    • 1970-01-01
    相关资源
    最近更新 更多