Существует множество примеров кода, в котором используется 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="..." />
?