Как создать файл ссылок url в android

Обновлено: 04.07.2024

Если элемент script имеет атрибут src , содержимое должно игнорироваться, любое другое поведение является несоответствующим.

предлагаемый в блогах (как взломать) для размещения контента в элементе, зная, что он не будет оцениваться, затем используйте методы DOM, чтобы получить содержимое в виде строки, и либо eval , либо вставить его в новый элемент сценария. Ни одна из них не является хорошей идеей.

Погруженный в демонстрации API, я нашел решение своей проблемы:

Я удалил большинство атрибутов в моем TextView, чтобы соответствовать тому, что было в демо.

Важно: Не забудьте удалить autoLink="web" , если вы вызываете setMovementMethod() .

Может быть, это только я, но зачем вам это делать с помощью EditText? – Justin 8 May 2012 в 19:41 Можно ли захватить клик и обработать его самостоятельно? Например. загрузить фрагмент. – qix 9 November 2013 в 15:22 Так же, как commment, я видел некоторые Samsung Galaxy S3 с ОС 4.3, которые сбой, когда "setMovementMethod (LinkMovementMethod.getInstance ()) & quot; , поэтому просто учтите это, мне пришлось создать проверку, прежде чем добавлять ее – Jorge Aguilar 25 March 2014 в 20:24 Тоже самое. Обратите внимание, что если вызывается setMovementMethod (), необходимо удалить autolink = "web" в файле XML, иначе ссылка не будет работать. Спасибо за комментарий – voghDev 5 May 2014 в 11:04 Просто используйте «autoLink». атрибут в вашем xml, например: android: autoLink = & quot; web & quot; – Kalpesh 22 May 2015 в 05:48

Я добавил эту строку в TextView : android:autoLink="web" Ниже приведен пример использования в файле макета.

Мой код был таким:

Мой код Java был примерно таким:

Это просто указывает ссылку на другое действие. Но эта ссылка доступна клиенту и работает плавно. Протестировано в Android Studio 1.5 (Preview)

Добавить CDATA в свой ресурс строки

Я заметил, что использование android:autoLink="web" , таким образом

, работало нормально для URL-адресов, но поскольку у меня был адрес электронной почты и номер телефона, который я хотел бы также связать, я в конечном итоге использовал это line android:autoLink="all" , подобный этому

, и он работал как шарм.

Вам нужно только это:

Вставьте эту строку в TextView, которую можно кликать по ссылке в Интернете. URL-адрес, заданный как текст этого TextView.

Надеюсь, это вам поможет,

Это отлично работает. Также убедитесь, что вы удалите android:autoLink=? из своего TextView . – sulai 17 October 2013 в 14:44 Это то, что окончательно сработало для меня. Valid HTML и не использовать android:autoLink=? важно! – Thorinside 23 October 2013 в 23:55 Для Xamarin это слово отображается, но не подчеркнуто и не может быть нажато с использованием вышеуказанных и НЕ этих параметров: autoLink, linksClickable – maxweber 1 November 2013 в 17:35 Для настройки Xamarin и установки текста или установки TextFormatted также выводится слово, но оно не зависит от клика, а не от синего / подчеркнутого. Удаление автозагрузки также не выполняется. Также исключается удаление только ссылокClickable. Удаление обоих также не выполняется. – maxweber 1 November 2013 в 17:37 helloWorld.TextFormatted = Html.FromHtml (linkURL); с и без них также терпит неудачу. (не связанный, а не синий) нельзя щелкнуть) – maxweber 1 November 2013 в 17:49

[Tested in Pre-lollipop as well as in Lollipop and above]

Вы можете получить строку HTML из бэкэнд или из ваших файлов ресурсов. Если вы поместите свой текст в качестве строки ресурса, обязательно добавьте тег CDATA :

Затем в коде вам нужно получить строку и назначить ее как HTML и установить метод перемещения ссылок :

Только то, что вам нужно добавить в текстовое представление в xml

Вышеупомянутые решения не сработали для меня, но следующее (и кажется немного чище). Во-первых, в строковом ресурсе определите свой шедевр открытия тегов с использованием кодирования сущности HTML, то есть:

Затем (как предложено здесь ) установите эту опцию в TextView:

Наконец, в code, do:

Вот и все, никаких регулярных выражений или других ручных хаков.

Это создаст HTML-парсер каждый раз, когда этот код будет выполнен. Имейте это в виду, если вы используете это для создания ссылок внутри элемента списка или в других важных для производительности местах вашего приложения. Во время создания списка это увеличивает время выполнения моих методов getView с 50% – Janusz 12 April 2012 в 16:04 Также обратите внимание, что пробелы в URL-адресе должны быть заменены на %20 – Nicolas Tyler 26 June 2014 в 14:19 Вы можете избежать проблем с кодировкой объектов, обернув свою строку в тег <![CDATA[ . ]]> . – Paul Lammertsma 15 September 2014 в 14:37 РАБОТАЕТ для меня, спасибо. Не работает с тегом <![CDATA[. ]]> . – ricky.tribbia 19 October 2015 в 09:12

с помощью linkify : Linkify возьмите кусок текста и регулярное выражение и превратите все совпадения регулярных выражений в тексте в интерактивные ссылки

Do not забудьте

Не знаю, стоит ли добавить еще один ответ, но на всякий случай .

Мне пришлось выслеживать это в нескольких местах, но, наконец, эта версия кода работает.

myactivty.java (in onCreate ()):

Это создаст две интерактивные гиперссылки с текстом link text1 и link text2 , которые перенаправляют пользователя на google.

Следующее должно работать для всех, кто ищет комбинацию текста и гиперссылки в приложении для Android.

Теперь вы можете использовать это string в любом данном View , как это:

Теперь, в вашей деятельности или фрагменте, сделайте следующее:

К настоящему времени вы не 't требуется установить android:autoLink="web" или android:linksClickable="true" с помощью этого подхода.

Надеюсь, вы найдете это полезным.

Вот как я решил использовать интерактивные и видимые ссылки в TextView (по коду)

но я бы хотел увидеть текст и при нажатии на текст он перенаправляется на ссылку (открытую браузером)? Это решение не решает это, не так ли? – Silentbang 12 December 2012 в 15:06

Я использовал это просто

делает ссылки кликабельными, заданные здесь

Этот ответ лучший. Работает на каждой версии Android, и нам просто нужно добавить этот метод, когда текст установлен в TextView. Бонус: он позволяет добавлять настраиваемые ссылки, доступные для клика – Kerwan 5 December 2014 в 17:56 Действительно самый простой и лучший ответ. он работает для электронной почты / Интернета в то же время . спасибо человеку . – Imran Ahmed 5 June 2015 в 08:42 Используйте LinkifyCompat, если вам нужны некоторые из новых расширенных функций – Vaiden 7 January 2018 в 00:10 Хорошо, он делает URL-адреса без <a href. кликабельными – Pavel 28 May 2018 в 14:59 Он также делает все "html" теги внутри работают соответственно, например. & Л; б & GT; . & л; / б & GT; и т.п. – Array 10 August 2018 в 12:52

Ричард, в следующий раз вы должны добавить этот код в TextView вместо XML.

Это должно быть так.

t нужно использовать этот код ( t2.setMovementMethod(LinkMovementMethod.getInstance()); ), чтобы сделать ссылку доступной.

Также, это правда: до тех пор, пока вы установите autoLink и linksClickable , не забудьте добавить это в файл String.xml, чтобы ссылка на клики работала.

Включено ли ваше устройство или интернет-эмулятор и установлено ли оно ON (Wi-Fi) или подключено к локальной сети, @ Violet Giraffe? – David Dimalanta 14 November 2013 в 08:50 Это. Мне никогда не удавалось сделать ссылки кликабельными, используя только атрибуты XML, для этого пришлось прибегнуть к Java-коду. Это неважно, но не приятно. – Violet Giraffe 14 November 2013 в 11:38

Я использую только android:autoLink="web" , и он работает нормально. Щелчок по ссылке открывает браузер и показывает правильную страницу.

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

Добавлено больше информации выше. Может ли это быть способ, которым я определяю строку как & lt; string name = & quot; txtCredits & quot; & gt; & lt; a href http://www.google.com">Google</a></string>" rel="nofollow noreferrer"> google.com" & gt; Google & lt; / a & lt; / string & gt; / / g0 ] ;? Похоже, это разрешено, но это не работает для меня. – Richard 29 April 2010 в 23:46 использование autolink отлично подходит для меня, просто текстовое представление без родителя вообще. – euther 5 December 2011 в 02:52 android: autoLink также отлично подходит для связывания телефонных номеров, адресов и адресов электронной почты (или всего выше). – CloudyMusic 23 March 2012 в 22:38 Нет, это не так, потому что этот ответ не работает, если вы не используете тег привязки с текстовым текстом, отличным от URL-адреса – cprcrack 25 January 2014 в 20:38

Причина, по которой у вас возникла проблема, заключается в том, что она только пытается сопоставить «голые» адреса. http://www.google.com/ http://www.google.com ".

Запуск текста через Html.fromHtml () должен сделать трюк. Вы должны сделать это программно, но он работает.

Ссылки в TextView отличаются от другого текста в строке, поэтому я считаю, что они распознаются как ссылки. Они просто не доступны для просмотра :-( – Richard 30 April 2010 в 18:49

Потратив некоторое время на это, я обнаружил, что:

  • android:autoLink="web" работает, если у вас есть полные ссылки в вашем HTML. Следующее будет выделено синим и кликабельным:
  • Некоторые тексты <a href="http://www.google.com">http://www.google.com</a>
  • Некоторые тексты http://www.google.com
  • view.setMovementMethod(LinkMovementMethod.getInstance()); будет работать со следующим (будет выделен и доступен кликабель):
  • Некоторые тексты <a href="http://www.google.com">http://www.google.com</a>
  • Некоторые тексты http://www.google.com
  • Некоторые тексты <a href="http://www.google.com">Go to Google</a>

Обратите внимание, что третий вариант имеет гиперссылку, но описание ссылки (сама часть между тегами) не является ссылкой. android:autoLink="web" НЕ работает с такими ссылками.


Android-приложения являются отражением сайта или сервиса и зачастую представляют собой сходный функционал в удобной оболочке. Из-за этого становится насущным вопрос навигации между страничкой в вебе и установленным клиентом. Для решения этой проблемы были изобретены диплинки (deeplink). Под катом вас ждёт увлекательная история о том, как мы внедряли их у себя и обрабатывали случай, когда у пользователя ещё не было установлено наше приложение.

Диплинки были придуманы так давно, что сейчас уже сложно представить приложение без них. Сама по себе технология не требует свежего Android API, однако если допиливать App Indexing, то можно столкнуться с тем, что работает оно с API 17.

Вернёмся к диплинкам. Их конфигурация представляет собой набор настроек для intent-filter в манифесте приложения, которые описывают паттерны поддерживаемых ссылок.

После реализации может возникнуть вполне резонный вопрос: что делать, если у пользователя ещё нет приложения? Ответом будут особые диплинки, которые в этом случае умеют направлять человека в Маркет. При должном усердии такую ссылку можно генерировать самим, но нет никаких гарантий, что она будет работать со всеми браузерами и на всех версиях Android. Сейчас довольно много сервисов, предлагающих решение по крайней мере части этих проблем, например, AppsFlyer с их OneLink или Firebase с DynamicLink. Все они работают примерно одинаково, только DynamicLink использует для обработки диплинков предустановленные сервисы Google.

OneLink


Сам по себе OneLink ведёт на серверы AppsFlyer; они определяют, с какого устройства пользователь вышел в сеть, и перенаправляют его на соответствующий адрес. Можно задать редиректы для десктопа, Android и iOS. Когда Android-приложение установлено, линк прилетает в него через Intent как обычный диплинк. Когда приложения нет, в работу вступают Google Chrome и Google Play.

Наличие приложения проверяется браузером. У Chrome есть спецификация особого формата ссылок, которые потом конвертируются им в Intent и отправляются в систему. Она предусматривает задание ссылки на Google Play в случае, если приложение не установлено. Подробнее с ней можно ознакомиться тут.

Вообще в Google Play можно передать ссылку на приложение таким образом, чтобы после установки и запуска он прокинул часть её дальше. Это реализуется с помощью query-параметра url и будет выглядеть примерно так:

В этом случае best.memes/jokes попадёт внутрь приложения после его установки в виде диплинка. По умолчанию AppsFlyer работает не так: он предлагает получить ссылку через интерфейс библиотеки. Сам диплинк при этом, видимо, передаётся в приложение через серверы сервиса.


Это очень неудобно, потому что, во-первых, мы не можем понять наверняка, надо ли нам ждать какие-то параметры или пользователь просто тыкнул в иконку и параметров не будет. Во-вторых, мы хотим сразу открывать нужный раздел приложения, без лишних блокировок и ожиданий. AppsFlyer же предлагает открывать главный экран, а когда пришли (и если пришли) параметры, то редиректить. Нас такой подход не устроил, поэтому мы сгенерировали свой url в Google Play с параметром для случая, когда пользователь переходит по диплинку с Android-устройства и у него нет приложения. Его мы задали в Onelink, чтобы получать диплинк в приложении без необходимости дожидаться библиотеку.

OneLink работал отлично, пока мы не попробовали пошарить его в Slack. Дело в том, что он открывает ссылки в своём встроенном браузере через Chrome Custom Tabs. Если коротко, то это вкладка браузера, которая открывается в процессе вашего приложения и может быть кастомизирована, чтобы не выбиваться из общего стиля (подробнее можно почитать тут). В этом случае откроется веб-версия Google Play и диплинк в приложение после установки проброшен не будет. Аналогично браузер ведёт себя, если руками скопировать OneLink в адресную строку и перейти по ссылке. Об этом случае разработчики Chrome писали в Release Notes несколько версий назад. Суть в том, что при таком подходе в браузере не срабатывает редирект в Google Play, когда приложение не установлено, и пользователь остаётся в вебе. Силами OneLink побороть это поведение не удалось, поэтому мы обратились к DynamicLink.

DynamicLink

Глубокая интеграция Google Play Services в систему позволяет им оптимизировать проверку наличия целевого приложения на устройстве. Это довольно закрытая экосистема, поэтому досконально разобраться в принципах её работы не удалось, однако всё указывает на то, что Chrome открывает активити с прогрессом, принадлежащую Google Play Services, которая определяет, как ей поступить с диплинком. После этого либо происходит редирект либо в Google Play, либо в приложение. При этом диплинк потом попадает в приложение через Intent, то есть без дополнительных библиотечных костылей.

Субъективно, такой подход функционирует не быстрее, чем OneLink, однако он работает при открытии ссылки в Chrome Custom Tabs, что является существенным преимуществом, потому что их используют многие приложения.


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

Выводы


В качестве подведения итогов я подготовил сводную таблицу. Я думаю, что под OneLink можно понимать любое конкурентное решение, потому что доступ к Google Play Services есть только у DynamicLink, соответственно, каких-то значимых различий между другими сервисами быть не должно.
OneLink. Целевое приложение установлено OneLink. Целевое приложение НЕ установлено DynamicLink. Целевое приложение установлено DynamicLink. Целевое приложение НЕ установлено
Ссылка открывается системой (ACTION_VIEW) + Пришлось «закостылить», чтобы получать диплинк сразу на старте + +
Ссылка открывается в Chrome Custom Tabs - - + +
По ссылке нажимают в браузере + Пришлось «закостылить», чтобы получать диплинк сразу на старте + +
Ссылку копируют в адресную строку - - + +

Из таблицы видно, что в реализации с DynamicLinks всё работает без костылей и во всех интересных нам случаях.

Это третья часть технического руководства по прямым ссылкам в Android. В предыдущих публикациях мы рассмотрели схемы URI и намерения в Chrome а следующая публикация будет посвящена Google Play Referrer.

Прямые ссылки с помощью ссылок приложений Android

  • Открыть приложение с намерением, если оно установлено.
  • Вернуться к веб-ссылке, если приложение не установлено.

Android app links deep linking

Через несколько месяцев, когда Android 6.0 получит более широкое распространение, можно будет начать отказываться от стандартных механизмов с URI и намерениями Chrome. А пока необходимо поддерживать эти механизмы вместе с другими, чтобы гарантировать работу во всех случаях, поскольку экосистема Android неоднородна.

Требования для использования ссылок приложений Android

  • Должен быть действующий веб-сайт.
  • Устройство пользователя должно работать под управлением Android 6.0 или более поздних версий.

Настройка ссылок приложений Android

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

  1. Настройте манифест для получения намерений.
  2. Зарегистрируйте веб-сайт в качестве ссылки приложения.

Шаг 1. Добавьте фильтры намерений в манифест

Это несложно. Грубо говоря, нужно сообщить системе Android, что по ссылке, ведущей на веб-сайт (-ы), нужно открывать приложение, а не веб-сайт.

Шаг 2. Настройте веб-сайт для поддержки ссылок приложений

Необходимо создать файл assetlinks.json следующего формата.

Примечание. Нам удалось добиться работоспособности ссылок приложений без изменения значения android_app по умолчанию.

Отпечаток SHA256 сертификата подписи вашего приложения. Для создания отпечатка потребуется использовать программу keytool. В командной строке перейдите в домашний каталог java, оттуда перейдите в папку bin. Выполните следующую команду.

$ keytool -list -v -keystore my-release-key.keystore

(Сведения о том, как найти программу keytool, см. в этом примере для Mac или Windows .)

Наконец, файл assetlinks.json должен быть размещен в каталоге /.well-known/assetlinks.json. Этот каталог мы создаем для всех интегрированных приложений Branch с помощью наших серверов узлов и экспресс-ссылок. Вот код, который мы использовали.

Обработка прямых ссылок в приложении

Чтобы обработать прямую ссылку в приложении, нужно просто получить строку данных намерения в действии, открытом при щелчке. Это можно сделать так.

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

Использование прямых ссылок на практике

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

Пока мы рекомендуем включить на веб-сайте поддержку ссылок приложений, но использовать существующие механизмы поддержки прямых ссылок на основе схемы URI и намерений в Chrome до тех пор, пока ссылки приложений не получат более широкого распространения. Например, если пользователь открывает ваш сайт, а на устройстве установлено приложение, нужно, чтобы срабатывало намерение Chrome или схема URI при нажатии кнопки запуска приложения на мобильном сайте. Ссылки приложений, по-видимому, не обрабатывают этого сценария.

Если у вас нет веб-сайта, но нужно использовать ссылки приложений, рекомендуем встроить представления Branch Deepviews в общую стратегию развития продукта. Это мобильные предварительные представления содержимого вашего приложения, они автоматически формируются нашей системой и размещаются в ней. Представления Deepview — удобная возможность просмотра содержимого пользователями, у которых не установлено вашего приложения. Это решение дополняет ссылки приложений Android.

Следите за дальнейшими публикациями, посвященными прямым ссылкам в Android.

В связи с последними обновлениями, буду стараться выкладывать уроки, созданные при помощи Android Studio.

Способов реализации данной задачи может быть множество. В итоге, нам нужно разместить на экране простой текстовый элемент, который будет похож на обычную ссылку и будет реагировать на касания. Описать этот элемент можно статически в файле разметки (layout), а можно и добавить динамически, по мере надобности.

В данном уроке будет описан первый способ с четырьмя реализациями.

Создадим новый проект. В мастере выберем Blank Activity

Снимок

Назовем его LinkTest.

Вот код разметки activity_main.xml :

Это схемка для уточнения:

Снимок

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

Снимок2

Пока это не то, что в заголовке статьи, потому как мы изменим вид разметки в коде.

Вот весь код MainActivity:

Теперь расскажу про каждую ссылку по порядку.

В методе blogView мы создадим намерение (intent) и запустим новую активность с этим намерением (startActivity(openlink)).

ОС Android сама поймет по намерению, что нужно запустить, т.е. браузер.

Узнаваемым мы его сделаем при помощи SpannableString, текст можно сделать жирным, подчеркнутым и т.д., более подробно почитайте об интерфейсе Spannable.

Второй элемент TextView с id равным tv_link2 мы задаем при помощи HTML, потом получаем из функции Html.fromHtml(linkedText) объект Spanned и его устанавливаем в TextView . Позже задаем ему MovementMethod (tv_test2.setMovementMethod(LinkMovementMethod.getInstance())), с помощью этого интерфейса можно реализовать много интересных вещей. При работе с простым TextView, мы используем класс LinkMovementMethod, как гласит документация, он поддерживает клики по ссылкам.

Третий элемент TextView с id равным tv_link3 создает ссылку просто:

Всю работу взял на себя метод класса Linkify.addLinks ,по сути он проделывает всю предыдущую работу по установке LinkMovementMethod, но перед этим проверяет текст на соответствие шаблонам ссылок.

Снимок

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

Читайте также: