2

有很多示例代码使用了一个IntentFilter与一个方案"http"mimeType集合。请参阅处理 MIME 类型的答案,它是 Android 中浏览器 POST 的结果、用于在 android中浏览 XML(特别是 rss)的意图过滤器以及如何在浏览器中打开 rss 链接时打开我的 Android 应用程序?

我的具体用例是 RSS 链接,就像最后两个问题一样,但是我想要拦截的 RSS 提要没有我可以有效匹配的路径pathPattern,我无法控制它。我尝试使用最初从 Google Reader 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 只会浏览到该文件。我安装了谷歌阅读器,但也没有响应意图。如果我将这些mimeType行替换为pathPattern与测试 URL 匹配的行,我的应用程序就会收到意图。通过向服务器发出 HEAD 请求,我验证了 URL 的 Content-Type 是作为“application/xml”发送的。测试设备是库存 ROM 上的 Nexus 10。

我通过恢复过滤器并在 shell 中mimeType启动 URL进行了另一项测试。am start此命令仅指定 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="..." />

4

1 回答 1

0

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

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

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

于 2013-07-10T12:32:14.800 回答