Запуск пользовательского приложения 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, например, затем откройте выбранный диалог..!!