Android: использование намеренного фильтра для запуска приложения не работает - PullRequest
1 голос
/ 10 декабря 2011

Я знаю, что этот вопрос задавался и отвечал много раз на SO, но я просто не мог заставить его работать. Вот мой файл манифеста (у меня есть 3 действия, я показываю только одно, которое я хочу отображать при ассоциировании):

    <activity
        android:name=".MyActivity"
        android:label="@string/app_name"
        android:theme="@style/HoloDarkTheme" >
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <action android:name="android.intent.action.ACTION_SEND" />
            <action android:name="android.intent.action.EXTRA_TEXT" />
        </intent-filter>
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.action.BROWSABLE" />
            <category android:name="android.intent.action.DEFAULT" />
            <data android:scheme="http" />
            <data android:host="example.com" />
        </intent-filter>
    </activity>

Когда я запускаю браузер и захожу на "example.com", мое приложение не запускается. Что-то не так с вышеуказанным XML?

Не уверен, если уместно, но это действие использует MediaPlayer для воспроизведения видео. Также я использую SDK версии 11.

Ответы [ 4 ]

1 голос
/ 13 декабря 2011

Я понял это.Это просто случай опечатки.Вместо этого

        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.action.BROWSABLE" />
        <category android:name="android.intent.action.DEFAULT" />

мне нужно было заменить "android.intent.action" на "android.intent.category" в последних двух строках:

        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.BROWSABLE" />
        <category android:name="android.intent.category.DEFAULT" />
0 голосов
/ 01 мая 2014

Я добавляю этот ответ сюда, потому что эта тема является одной из самых популярных при поиске в 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 и электронной почты, что дает мне бесплатную возможность добраться до этого момента.

И обратите внимание, что если вы укажете уникальный хост (и путь) и пользователь выберет «Всегда» при выборе приложения из списка, будущие нажатия на вашу ссылку будут обходить этот диалог выбора и переходить прямо к вашему приложению, которое это хорошо.

0 голосов
/ 10 декабря 2011

Я сомневаюсь, что вы можете переопределить схему http, чтобы указать назад на ваше приложение.

0 голосов
/ 10 декабря 2011

Убедитесь, что у вас есть разрешение на доступ к Интернету в манифесте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...