Как я могу показать свое приложение в настройке намерения только для определенных URL-адресов?
Я разрабатываю приложение, которое может извлекать информацию с определенных веб-страниц. Идея состоит в том, что когда пользователь находится в определенном URL-адресе в браузере и нажимает кнопку совместного доступа, мое приложение будет отображаться в списке приложений-приемников.
Я могу сделать это легко, добавив это в манифест:
<intent-filter android:label="@string/app_name" >
<action android:name="android.intent.action.SEND" />
<data android:mimeType="text/plain" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
Однако это приведет к тому, что мое приложение появится в списке по всем URL-адресам, а также всем тем, где ему нечего делать. Вместо этого я хотел бы, чтобы приложение отображалось в выборке только из этих URL-адресов:
www.example.com/foo/bla.html
www.example.com/foo/bar/blabla.html
Но не из них:
www.example.com
www.foobar.com
и т.д.. То есть. только с определенного пути на определенном хосте. Также обратите внимание, что я не хочу, чтобы мое приложение запускалось, когда пользователь нажимает на ссылки, соответствующие критериям. Его следует вызывать только из общего меню.
Итак, мой вопрос: как я могу ограничить мое приложение отображением в намерении выбирать только для определенных URL-адресов?
Ответы
Ответ 1
Добавить следующий фильтр в пункт назначения.
1. хост имя вашего сайта.
2. схема схемы вашего сайта http или https.
3. путь для пути к файлу, отображаемого вашим приложением.
<intent-filter>
<data
android:host="www.example.com"
android:scheme="http"
android:path="/foo/bla.html"
/>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" >
</category>
<category android:name="android.intent.category.BROWSABLE" >
</category>
</intent-filter>
Ответ 2
Как я могу ограничить мое приложение отображением в намерении выбирать только для определенных URL-адресов?
Вы не можете. ACTION_SEND
не имеет понятия "только с определенных URL-адресов" или "только у определенных пользователей WhatsApp" или "только у левых аляскинских сварщиков труб".
Это не сильно отличается от любого другого вида деятельности. <intent-filter>
управляет только тем, что доставляет Intent
. Ничто не контролирует доставку Intent
, за исключением элементов, связанных с безопасностью (разрешения, независимо от того, экспортирован ли компонент и т.д.).
Итак, с ACTION_VIEW
, URL-адрес - это что-то, доставляемое в другое действие ( "Я хочу просмотреть этот URL-адрес" ). Это работает, потому что URL-адрес преобразуется в Uri
в Intent
и может быть отфильтрован через элементы <data>
в <intent-filter>
.
Но ACTION_SEND
не должен иметь URL-адрес, и даже если он есть, это просто полезная нагрузка в виде дополнительной. Это не то, на что можно отфильтровать.
Следовательно, то, что вы хотите, не поддерживается.
Ответ 3
Используйте pathPrefix
<intent-filter>
<data
android:host="www.example.com"
android:scheme="http"
android:pathPrefix="/foo/"
/>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" >
</category>
<category android:name="android.intent.category.BROWSABLE" >
</category>
</intent-filter>