Работают ли фильтры намерений mime-типа с URL-адресами HTTP?

Существует множество примеров кода, в котором используется IntentFilter со схемой "http" и набором mimeType. См. ответы на Обработка MIME тип, который является результатом POST браузера в Android, Фильтр намерений для просмотра XML (в частности, rss) в Android и Как открыть мое приложение для Android, когда ссылка rss открыта в браузере?

У меня есть конкретный вариант использования для ссылок RSS, как и в последних двух вопросах, но RSS-каналы, которые я хочу перехватить, не имеют пути, который я мог бы с пользой сопоставить с помощью pathPattern, и я не могу это контролировать. Я попытался использовать тот же фильтр намерений, который был первоначально извлечен из APK Google Reader:

    <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 Reader, и он тоже не соответствует намерениям. Если я заменю строки mimeType строкой pathPattern, которая соответствует тестовому URL-адресу, мое приложение получит намерение. Делая запросы HEAD на сервер, я убедился, что Content-Type URL-адреса отправляется как «application/xml». Тестовое устройство — Nexus 10 со стандартным ПЗУ.

Я сделал еще один тест, восстановив фильтры 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 Reader. Кажется, это подтверждает, что фильтр вступает в силу, но Chrome запускает намерение без указания типа, а преобразователь намерений не находит тип по URL-адресу (как это происходит для content: URI), но кажется неправдоподобным, что так много людей могут использовать и рекомендовать фильтры намерений, которые не могут работать. У кого-нибудь есть окончательный ответ: какая польза от фильтра намерений с <data android:scheme="http" android:mimeType="..." />?


person Dan Hulme    schedule 09.05.2013    source источник


Ответы (1)


Согласно другому ответу StackOverflow, браузер проверяет заголовок Content-Disposition и даже не проверяет фильтры намерений, если он указывает на вложение.

Может ли это быть проблемой, с которой вы столкнулись?

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

person Pierre-Luc Paour    schedule 10.07.2013
comment
Ответ, на который вы ссылаетесь, заключается в том, что кто-то догадывается, что происходит. В данном случае это определенно не так: файлы RSS не имеют заголовка Content-Disposition: attachment. - person Dan Hulme; 10.07.2013