Как я могу показать свое приложение в настройке намерения только для определенных 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>