Откройте приложение с (глубокой) ссылкой, содержащей путь и параметр запроса - PullRequest
0 голосов
/ 06 ноября 2019

Эти три URL даны:

1) https://example.com

2) https://example.com/app

3) https://example.com/app?param=hello

Предполагается, что я получаю письмо в gmail-приложении с этими тремя ссылками, мне нужно следующее поведение:

1) Should not open the app

2) Should open the app

3) Should open the app and extract the parameter's value

Чтоя уже достиг:

    <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="example.com"
            android:pathPrefix="/app"
            android:scheme="https" />
    </intent-filter>

Этот фрагмент отлично работает для случаев 1) и 2): первый URL-адрес не открыт в приложении, второй -. Но третья ссылка, к сожалению, не открывалась приложением.

Я также пробовал несколько разных вариантов с path, pathPrefix и pathPattern, но мне не повезло, выполнив все три указанных поведения.

Поэтому мне нужна ваша помощь, ребята, можете ли вы предоставить фрагмент кода, который отвечает заданным требованиям, или некоторые советы, которые я могу проверить?

Обновление:

Изменение *От 1025 * до android:pathPattern теперь работает нормально: выбор системы для целей отображается только для случаев 2) и 3), случай 1) открывает браузер напрямую.

, но

, чего я хочу достичь, это проверить определенный параметр перед тем, как войти в приложение или запустить средство выбора намерений. Это должно происходить, только если параметр param содержит значение hello, а не goodbye. Возможно ли это с каким-то регулярным выражением внутри pathPattern -атрибута?

1 Ответ

0 голосов
/ 06 ноября 2019

Я надеюсь, что это решение поможет вам в решении задачи.

Manifest.xml

Не включайте android:pathPrefix="/app" в Манифест.xml

<activity android:name=".YourActivity">
        <intent-filter android:label="@string/app_name">
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />

            <data android:scheme="http"
                  android:host="example.com"/>
        </intent-filter>
</activity>

В YourActivity.kt проверьте данные Intent для выполнения дальнейших действий.

Примечание: Коднаписано в Kotlin

    val action = intent.action
    val data = intent.dataString
    if (Intent.ACTION_VIEW == action && data != null) {
        if (data.equals("http://example.com")) {
            Toast.makeText(this, "contains only URL", Toast.LENGTH_SHORT).show()
        } else if (data.contains("http://example.com/") && !data.contains("?")) {
            Toast.makeText(this, "contains URL with pathPrefix", Toast.LENGTH_SHORT).show()
        } else if (data.contains("http://example.com/") && data.contains("?")) {
            Toast.makeText(this, "contains URL with data", Toast.LENGTH_SHORT).show()
        }
    } else {
        Toast.makeText(this, "Intent from Activity", Toast.LENGTH_SHORT).show()
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...