Проблема с разрешением входящих намерений фильтром намерений - PullRequest
2 голосов
/ 28 мая 2020

Возникла проблема, касающаяся разрешения входящих намерений с помощью фильтров намерений, и хочет знать точную причину такого поведения.

У меня есть действие с фильтром намерений, как показано ниже. 1005 * Все работало, как ожидалось, то есть разрешило URI формата dltest: // test1

Затем мне пришлось поддерживать URL в формате https://www.mine.com/, для которого я добавил новый тег данных в тот же фильтр намерений, что привело к

  <activity android:name=".deeplink.DeeplinkActivity">
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />

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

            <data
                android:host="www.mine.com"
                android:scheme="https" />

            <data
                android:host="*"
                android:scheme="dltest" />

        </intent-filter>
    </activity>

Теперь он обрабатывает URI обоих типов, но также обрабатывает все намерения со схемой как https и хост как что-либо (подстановочная карта), который имеет неуказанный формат, например: https://developer.android.com

<data
     android:host="*"
     android:scheme="https" />

Я знаю, что это можно решить, разделив два тега данных в два разных фильтра намерений внутри одного и того же действия, но я не мог понять, как работает вышеуказанная стратегия разрешения где угодно. Может кто мне помочь с причиной

1 Ответ

1 голос
/ 28 мая 2020

Google в одной из официальных android документации сказал, что

Хотя в один фильтр можно включить несколько элементов, важно, чтобы вы создавали отдельные фильтры, когда вы намерены объявить уникальные. URL-адреса (такие как специфицированная c комбинация схемы и хоста), потому что несколько элементов в одном фильтре намерений фактически объединяются вместе, чтобы учесть все варианты их объединенных атрибутов. Например, рассмотрим следующее:

<intent-filter> 
  <data android:scheme="https" android:host="www.example.com" />
  <data android:scheme="app" android:host="open.my.app" />
</intent-filter>

Может показаться, что это поддерживает только https://www.example.com и app: //open.my.app. Однако он на самом деле поддерживает эти два, а также следующие: app: // www.example.com и https://open.my.app.

В основном, как @ commonsware сказал, что он выполняет своего рода логический ИЛИ за кулисами ... и, таким образом, обеспечивает соблюдение всех комбинаций

Источник: Создание глубоких ссылок на контент приложения

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