Я добавляю этот ответ сюда, потому что эта тема является одной из самых популярных при поиске в Google "фильтра намерений для запуска приложения с http не работает". Я полагаю, что основную причину для меня тоже можно считать опечаткой, но я собираюсь назвать это «дефектом документации Android».
Есть прямая линия к нижней части этой страницы , которая разбивает URI как:
<scheme>://<host>:<port>/<path>
Эта разбивка указывает, что для меня будут добавлены ": //", ":" и "/", поэтому я использовал следующие данные в своем intent-filter
:
<data android:scheme="http" />
<data android:host="my.school.edu" />
<data android:path="thingy" />
Затем я отправил себе SMS со следующим текстом: «my.school.edu/thingy», который был распознан моим SMS-клиентом (видеовстречами) как веб-адрес, поэтому он стал кликабельным. Однако, щелкнув по нему, я получил выбор браузеров, мое приложение не показывалось.
Итак, я удалил хост и путь, и мое приложение запустилось для любой ссылки (или по крайней мере для каждой, которую я пытался). Я вернул хост, и он все еще работал. Верните путь назад, и мы снова не работаем. По своей прихоти я решил добавить косую черту к пути:
<data android:path="/thingy" />
... и вуаля! В браузерах есть мое приложение! Так что, на мой взгляд, ошибка в документации Android, которая предполагает, что слеш вставляется автоматически. :) Видимо нет.
Дополнительная информация: я использую схему HTTP, потому что это то, что становится кликабельным в сообщениях SMS и электронной почты, что дает мне бесплатную возможность добраться до этого момента.
И обратите внимание, что если вы укажете уникальный хост (и путь) и пользователь выберет «Всегда» при выборе приложения из списка, будущие нажатия на вашу ссылку будут обходить этот диалог выбора и переходить прямо к вашему приложению, которое это хорошо.