mime类型的intent过滤器是否适用于HTTP URL?

时间:2013-05-09 10:15:16

标签: android mime-types intentfilter

有很多示例代码使用IntentFilter,方案为"http"mimeType。查看Handling MIME type that is the result of a browser POST in AndroidIntent filter for browsing XML (specifically rss) in androidHow to open my Android app when rss link is opened in browser?

的答案

我的具体用例是RSS链接,就像最后两个问题一样,但是我要拦截的RSS提要没有我可以通过pathPattern有效匹配的路径,而我无法控制那。我尝试使用最初从Google阅读器APK中提取的相同意图过滤器:

    <intent-filter android:label="@string/NewURL_intent_rss">
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
        <data android:scheme="http"/>
        <data android:host="*" />
        <data android:mimeType="text/xml"/>
        <data android:mimeType="application/rss+xml" />
        <data android:mimeType="application/atom+xml"/>
        <data android:mimeType="application/xml"/>
    </intent-filter>

但是当我通过点击Chrome中指向此类文件的链接进行测试时,Chrome只会浏览该文件。我安装了Google阅读器,但也没有响应意图。如果我将mimeType行替换为与测试网址匹配的pathPattern,我的应用会收到意图。通过向服务器发出HEAD请求,我已经验证了URL的Content-Type是作为“application / xml”发送的。测试设备是库存ROM上的Nexus 10。

我通过恢复mimeType过滤器并在shell中从am start启动URL来进行另一项测试。此命令仅指定URL

am start -a android.intent.action.VIEW -c android.intent.category.BROWSABLE -d http://my.test/url

启动了浏览器,但是当我在此命令中明确指定了类型时,

am start -a android.intent.action.VIEW -c android.intent.category.BROWSABLE -t application/xml -d http://my.test/url

它向我展示了我的应用和Google阅读器的意图选择器。这似乎确认过滤器正在生效,但Chrome在没有提供类型的情况下启动了意图,并且意图解析程序没有从URL中找到类型(它对content: URI的方式),但是这么多人可能正在使用和推荐无法工作的意图过滤器似乎难以置信。有没有人有明确的答案:使用<data android:scheme="http" android:mimeType="..." />的意图过滤器有什么用?

1 个答案:

答案 0 :(得分:0)

根据另一个StackOverflow答案,浏览器检查Content-Disposition标头,如果它指示附件,则甚至不检查意图过滤器。

这可能是你面临的问题吗?

https://stackoverflow.com/a/8770360/304876