Запуск пользовательского приложения Android из браузера Android/Chrome

Прежде всего, мой вопрос очень похож на этот, этот и это. Документация для Android, которую я пытаюсь достичь, здесь. Я не мог заставить это работать с использованием этих ресурсов, поэтому, пожалуйста, не отмечайте это как дублирующее, так как это не так.

У меня есть веб-сайт и приложение для Android. Пользователь сможет сканировать QR-коды, содержащие ссылки, такие как http://mywebsite.com/map/. Когда пользователь попытается открыть эту ссылку, я хочу, чтобы Android показал ему диалог выбора, где он может выбрать, чтобы открыть эту ссылку, используя мое приложение. Если мое приложение не установлено, оно должно перейти на указанный веб-сайт.

Я знаю, что Chrome позволяет это, открыв диалог выбора, когда пользователь переходит к этому адресу. Например, попробуйте загрузить приложение для стека Exchange и перейти к этому вопросу в Chrome. Он покажет это:

Screenshot of chooser dialog.

Я добавил следующий код в AndroidManifest.xml после того, как вы указали в вышеупомянутых ответах:

<intent-filter>
    <action android:name="android.intent.action.VIEW" />
    <action android:name="android.intent.action.SEND" />

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

    <data
        android:host="mywebsite.com"
        android:path="/map"
        android:scheme="http" />
    <data
        android:host="mywebsite.com"
        android:path="/animals"
        android:scheme="http" />
    <data
        android:host="mywebsite.com"
        android:path="/articles"
        android:scheme="http" />
</intent-filter>

Кроме того, я попытался добавить android: mimeType = "text/plain" к данным, но это не помогло.

Проблема в том, что когда я перехожу к http://mywebsite.com/map или http://mywebsite.com/map/ Chrome просто открывает веб-страницу, не показывая диалог выбора.

Я хотел бы упомянуть:

  • Следуя документации на Android, я добавил этот код внутри одной из структур активности в AndroidManifest.xml. Поскольку я не уверен, что это идеальное место для его добавления, я также попытался добавить его вне структуры приложения и непосредственно внутри структуры приложения, но он не работал.
  • Это единственный код, который я реализовал для этого. Если что-то еще нужно, пожалуйста, дайте мне знать. Насколько я понимаю, добавление href на веб-страницу необходимо только при использовании настраиваемых схем
  • Я не хочу использовать пользовательскую схему, чтобы достичь этого.
  • Я развиваюсь на Nexus 4, под управлением Android 4.4.2 (последний)

Ответ 1

Вам нужно настроить его следующим образом:

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

Обратите внимание, что в вашем случае вам нужно будет использовать android: pathPrefix вместо android: path.

Ответ 2

Чтобы быть уверенным, что вы должны reset настройки вашего приложения, если вы случайно установили его, чтобы всегда открывать ссылку в chrome, а не показывать диалог выбора. Когда "Всегда" используется для открытия соответствующего uri, он никогда не отображает выборщика.

Во-вторых, вы можете иметь столько элементов данных в фильтре намерения, сколько хотите, но нет необходимости повторять информацию. Вы можете сделать то же самое:

<data android:host="mywebsite.com"/>
<data android:scheme="http"/>
<data android:path="/map"/>
<data android:path="/animals"/>
<data android:path="/articles"/>

Но обратите внимание, что для пути вы можете просто использовать подстановочный знак

<data android:path="/.*"/>

Рассмотрим добавление дополнительного

<data android:host="www.mywebsite.com"/>

И, наконец, вы можете не захотеть отобразить диалог выбора, но напрямую открыть конкретное приложение/действие. На вашем веб-сайте, если вы обнаружите пользовательский агент Android, вы можете создать URL-адрес ссылки следующим образом:

<a href="intent://mywebsite.com/articles#Intent;package=com.myapp;scheme=http;end;"/>

Подробнее см. здесь Как открыть любое приложение из моего браузера (Chrome) в Android? Что мне нужно сделать с ссылкой A HREF?

Обратите внимание, что с помощью этого метода, если приложение не установлено, пользователь будет отправлен в хранилище Google Play для указанного пакета приложений.

Если у вас все еще есть проблемы, проверьте приоритет фильтра назначения. http://developer.android.com/guide/topics/manifest/intent-filter-element.html

Ответ 3

В моем случае URL сайта: http://www.example.org/mobile/

поэтому этот код следует выполнять в AndroidManifest.xml внутри действия

            <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.example.org"
                    android:pathPrefix="/mobile/"
                    android:scheme="http" />
            </intent-filter>

Здесь

схема → Протокол определенного сайта

хост → Точный URL сайта с WWW

pathprefix → Подкаталог вашего сайта, если он доступен

Теперь,

Вы можете выполнить поиск с помощью окна поиска браузера Chrome/etc android, например, затем откройте выбранный диалог..!!