Android url override не работает при перенаправлении

у меня есть url, который я переопределяю в своем приложении для Android. При нажатии на ссылку из электронной почты на эту ссылку появляется Intent Chooser dialog ("завершить это с помощью"). Однако, нажав на ту же ссылку (в <a> тег) из Chrome (на Android 4) перенаправляет меня на этот url-адрес и не предлагает Intent Chooser.

если я заменю ссылку в <a> тег со ссылкой на Google Play Store (https://play.google.com) затем при нажатии на ссылку всплывает Intent Chooser еще раз.

Is там что-то особенное с Google Play Store и Chrome, или я сделал что-то неправильно, настроив свой url? Есть ли что-то, что я могу сделать в html, чтобы сделать эту работу?

здесь <intent-filter>

<activity
    android:label="@string/app_name"
    android:name="..."
    >
    <intent-filter>
        <action android:name="android.intent.action.MAIN"/>
        <category android:name="android.intent.category.LAUNCHER"/>
    </intent-filter>
    <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:scheme="https"
              android:host="www.example.com"
            />
        <data android:scheme="http"
              android:host="www.example.com"
            />
    </intent-filter>
</activity>

(перенаправление на url-адрес также не всплывает Intent Chooser диалог, но я понял, что моя ситуация выше более четко выражает мою проблему.)

кроме того, я уверен, что все это работало, пока мой домен не работал. Как только мои владения вышел в интернет, это перестало работать. Это может быть плодом моего воображения, поскольку в то время я не был на 100% сосредоточен на этой проблеме.

возможно ли, что Chrome обрабатывает специальные URL-адреса Google Play Store, иначе он ждет ответа не 200 от url-адреса перед открытием Intent Chooser?

3 ответов


вполне может быть реальной / известной ошибкой.

тот, который я предложил (но который теперь закрыт, поэтому, похоже, будет исправлен для версии, с которой вы пытаетесь): https://code.google.com/p/chromium/issues/detail?id=113140

найдено / открыто @xbakesk: https://code.google.com/p/chromium/issues/detail?id=170925 https://code.google.com/p/chromium/issues/detail?id=230104

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


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

вот мой фильтр намерений из файла манифеста:

<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:scheme="http" android:host="realsimpleapps.com" android:pathPrefix="/acv/" />
</intent-filter>

вот мой html-файл:

<a href="http://realsimpleapps.com/acv/aThing">Click Me!</a>

и в моей основной деятельности я использую это, чтобы захватить все, что у меня есть" все " (выше), установленное на:

Uri data = getIntent().getData();
if (data != null) {
    List<String> params = data.getPathSegments();
    if (params != null) {
        Log.d(tag, "Param 0: " + params.get(0));
    }
}

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

дайте нам знать, как она идет.

db


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

Если у вас есть контроль над url-адресом, который находится на веб-странице, вы можете изменить http на свой собственный протокол, чтобы ваше приложение открылось вместо запроса в веб-браузере.