有很多示例代码使用IntentFilter
,方案为"http"
和mimeType
。查看Handling MIME type that is the result of a browser POST in Android,Intent filter for browsing XML (specifically rss) in android和How 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="..." />
的意图过滤器有什么用?
答案 0 :(得分:0)
根据另一个StackOverflow答案,浏览器检查Content-Disposition标头,如果它指示附件,则甚至不检查意图过滤器。
这可能是你面临的问题吗?