Обходной путь для Chrome на Android не запускается при нажатии на ссылки

81
6

Я работаю над Android-приложением, которое обрабатывает намерения для определенных http (s) ссылок. Он работает в большинстве случаев, но не для кликов по ссылкам в Chrome, благодаря этой ошибке/отсутствующей функции. Короче говоря, Chrome не передает намерение для этих кликов.:/


Это может быть исправлено в конце концов, но пока кто-нибудь знает обходное решение?


Если бы я контролировал сами ссылки, я мог бы использовать свою собственную схему HTTP, например. myapp://... или я мог использовать JavaScript для подделки щелчка кнопки, оба из которых отправляют намерение... но я не контролирую ссылки.


В частности, я хотел бы обрабатывать такие ссылки, как http://github.com/snarfed. Ниже приведено определение моей активности в AndroidManifest.xml. Он правильно принимает намеренные трансляции для этих видов ссылок на клики из других приложений, а не из Chrome.


<activity android:name="MyApp" android:exported="true">
<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" />
<data android:scheme="https" />
<data android:host="github.com" />
</intent-filter>
</activity>

спросил(а) 2013-07-17T20:44:00+04:00 7 лет, 3 месяца назад
1
Решение
130

Вам нужно включить схему, host и pathPrefix в каждую точку данных.


Пример соответствующего манифеста:


<activity
android:name=".PhotostreamActivity"
android:label="@string/application_name">

<!-- ... -->

<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="flickr.com"
android:pathPrefix="/photos/" />
<data android:scheme="http"
android:host="www.flickr.com"
android:pathPrefix="/photos/" />
</intent-filter>
</activity>

Этот пример взят из приложения Romain Guy, которое собрано вместе и ссылается на дублированный вопрос:


Перехват ссылок из браузера, чтобы открыть приложение для Android


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

ответил(а) 2013-07-24T15:26:00+04:00 7 лет, 2 месяца назад
89

Кажется, что Chrome только запускает намерения, если у фильтра намерения есть путь, pathPrefix или pathPattern.
Итак, чтобы отфильтровать весь домен, я решил эту проблему, добавив android:pathPattern=".*", например:

<intent-filter
android:priority="999">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:host="mydomain.com"
android:scheme="http"
android:pathPattern=".*" />
<data
android:host="www.mydomain.com"
android:scheme="http"
android:pathPattern=".*" />
</intent-filter>

ответил(а) 2013-11-23T19:09:00+04:00 6 лет, 11 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема