有很多示例代码使用了一个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="..." />
?