Webview не работает в Android Studio

Обновлено: 05.10.2022

Android WebView используется для отображения HTML в приложении для Android. Мы можем использовать Android WebView для загрузки HTML-страницы в приложение для Android.

Веб-представление Android

Компонент Android WebView — это полноценный браузер, реализованный как подкласс View для встраивания в наше приложение для Android.

Важность Android WebView

Для HTML-кода, область действия которого ограничена, мы можем реализовать статический метод fromHtml(), принадлежащий классу HTML Utility, для анализа строки в формате HTML и ее отображения в TextView .

TextView может отображать простое форматирование, например стили (полужирный, курсив и т. д.), шрифты (с засечками, без засечек и т. д.), цвета, ссылки и т. д.

Однако, когда дело доходит до сложного форматирования и больших масштабов с точки зрения HTML, TextView не справляется с этим. Например, просмотр Facebook через TextView будет невозможен.

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

WebView также может помочь с распространенными метафорами просмотра, такими как список истории посещенных URL-адресов, для поддержки навигации назад и вперед.

Тем не менее, у WebView есть свои минусы, например, это гораздо более дорогой виджет с точки зрения потребления памяти, чем TextView. Причина такого увеличения объема памяти заключается в том, что WebView работает на основе WebKit/Blink, которые являются механизмом веб-рендеринга с открытым исходным кодом для поддержки контента в таких браузерах, как Chrome.

Пример Android WebView

Компонент Android WebView вставляется в XML-файл макета для макета, в котором мы хотим отображать WebView. В этом примере мы вставляем его в файл activity_main.xml, как показано ниже:

Код Android Studio WebView

Компонент WebView инициализируется в MainActivity с использованием его идентификатора, определенного в файле activity_main.xml, как показано во фрагменте ниже:

URL-адрес загрузки Android WebView

Прежде чем мы начнем экспериментировать с URL, необходимо обратить внимание на два важных аспекта:

  1. Поддержка JavaScript. JavaScript по умолчанию отключен в виджетах WebView. Следовательно, веб-страницы, содержащие ссылки на javascript, не будут работать должным образом. Чтобы включить сценарий Java, необходимо вызвать следующий фрагмент кода в экземпляре веб-просмотра:
  2. Добавление разрешений. Чтобы получить и загрузить URL-адреса в WebView, нам нужно добавить разрешения для доступа в Интернет из приложения, иначе оно не сможет загружать веб-страницы. В файл AndroidManifest.xml необходимо добавить следующую строку кода над тегом приложения, как показано ниже:

Приведенный ниже класс MainActivity содержит все функции, которые обсуждались до сих пор.

Настройка WebViewClient

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

Чтобы сохранить навигацию по страницам в WebView и, следовательно, в приложении, нам нужно создать подкласс WebViewClient и переопределить его метод shouldOverrideUrlLoading(WebView webView, String url).

Вот как будет выглядеть такой подкласс WebViewClient:

Когда метод shouldOverrideUrlLoading() возвращает false, URL-адреса, переданные в качестве параметра метода, загружаются внутри WebView, а не в браузере.

Чтобы различать URL-адреса, загружаемые в приложении и браузере, необходимо добавить следующий код в метод shouldOverrideUrlLoading():

Примечание. Возвращаемое значение true не означает, что URL-адрес открывается в браузере. На самом деле URL-адрес вообще не будет открыт. Чтобы загрузить URL-адрес в браузер, необходимо активировать намерение. Следующий подкласс содержит все добавленные нами конфигурации.

Конструктор принимает Activity в качестве параметра для запуска намерения в браузере.

Прежде чем создавать экземпляр этого подкласса в MainActivity, давайте рассмотрим еще одну важную функцию.

Навигация WebView с кнопкой «Назад»

Если мы нажмем кнопку «Назад» в приложении, разработанном на данный момент, мы увидим, что приложение возвращается на главный экран, даже если мы перешли через несколько страниц в самом WebView. Чтобы просмотреть историю просмотров при нажатии кнопки «Назад», нам нужно изменить функцию кнопки «Назад», как показано во фрагменте ниже:

Метод onKeyDown() был переопределен реализацией, которая сначала проверяет, может ли WebView вернуться. Если пользователь ушел с первой страницы, загруженной в WebView, тогда WebView может вернуться.

WebView поддерживает историю посещенных страниц, как и обычный браузер. Если истории нет, это приведет к поведению кнопки «Назад» по умолчанию, т. е. к выходу из приложения.

Ниже приведен код для MainActivity с перечисленными выше функциями.

На изображении ниже показан результат, созданный нашим проектом. Вы можете видеть, что WebView загружается с предварительно назначенным URL-адресом.

Варианты загрузки контента в WebView

До сих пор мы использовали метод loadUrl() для загрузки содержимого в WebView. Здесь мы увидим другие способы загрузки контента после краткого ознакомления с использованием loadUrl().

loadUrl() работает с:

Вместо loadUrl() мы можем использовать loadData(), с помощью которого мы можем отображать фрагменты или весь HTML-код в методе. Есть два варианта loadData(). Более простой вариант позволяет нам предоставлять содержимое, тип MIME и кодировку в виде строк. Как правило, тип MIME будет text/html, а кодировка будет UTF-8 для обычного HTML, как показано ниже:

Ниже показан результат добавления приведенного выше фрагмента в MainActivity, как показано ниже:

android webview


Есть также метод loadDataWithBaseURL(). Среди прочих параметров для этого требуется базовый URL-адрес, который будет использоваться при разрешении относительных URL-адресов в HTML. Любой относительный URL-адрес (например, ) будет интерпретироваться как относительный к базовому URL-адресу, предоставленному для loadDataWithBaseURL().

Параметр historyUrl — это URL-адрес для записи во внутреннюю историю навигации WebView для HTML-кода, загруженного в WebView. В следующем фрагменте показан его прототип:

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

После нового обновления API 29 Android 10 в декабре 2019 года react-native-webview не работает на Android 10.

Описание ошибки:
Белый экран в представлении

Снимок экрана 2020- 02-10 в 10 58 03

Ожидаемое поведение:
Показать веб-просмотр с URL-адреса
в iOS

Снимок экрана 2020- 02-10 в 11 04 30

Скриншоты/видео:
белый экран и циклическая загрузка
на Android Nexus 5 API 29

Окружающая среда:

  • ОС: Android
  • Версия ОС: 10
  • версия нативной реакции: 0.61.2
  • версия react-native-webview: ^7.4.3

Текст был успешно обновлен, но возникли следующие ошибки:

imamkodei889 прокомментировал 10 февраля 2020 г.

такая же проблема.. нужно решение..

mahavirvataliya прокомментировал 14 февраля 2020 г.

mghozyn прокомментировал 10 марта 2020 г.

Есть новости об этих ошибках?

rynpatk прокомментировал 11 марта 2020 г.

njthulung прокомментировал 15 марта 2020 г.

kimpoy04 прокомментировал 17 марта 2020 г.

Обнаружил это на выставке. Исправил это, выполнив: yarn react-native link react-native-webview

maxlxq прокомментировал 24 марта 2020 г.

xinfang прокомментировал 1 апреля 2020 г.

andraz-at прокомментировал 11 апреля 2020 г.

sebqq прокомментировал 17 апреля 2020 г.

Хм, значит, в настоящее время нет решения для этого? Я сталкиваюсь с той же проблемой, но только в производственной версии (используя Android App Bundle)

sebqq прокомментировал 17 апреля 2020 г.

О, моя проблема заключалась в том, что я явно не добавил "https://" к URL-адресу.

прокомментировал oailloud 29 мая 2020 г. •

Так же и здесь, наши пользователи сообщают о сбоях в Android 10 (среди устройств есть S9).

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

Может ли это быть связано с тем, что Google перестал использовать Chrome в качестве обработчика WebView в Android 10 и переключился обратно на Android System WebView?

Кстати, я безуспешно пытался обновиться до версии 10.1.1.

Бот github-actions прокомментировал 29 июля 2020 г.

Здравствуйте 👋 , этот вопрос был открыт более 2 месяцев без каких-либо действий по нему. Если проблема все еще существует, имейте в виду, что нам нужна поддержка сообщества и помощь в ее устранении! Просто прокомментируйте что-то вроде все еще ищете решения, и если вы их нашли, пожалуйста, откройте запрос на вытягивание! У вас есть 7 дней до автоматического закрытия.

WebView — это представление, отображающее веб-страницы внутри вашего приложения. Вы также можете указать строку HTML и показать ее внутри своего приложения с помощью WebView. WebView превращает ваше приложение в веб-приложение.

Чтобы добавить WebView в ваше приложение, вы должны добавить элемент в свой XML-файл макета. Его синтаксис следующий —

Чтобы использовать его, вы должны получить ссылку на это представление в файле Java. Чтобы получить ссылку, создайте объект класса WebView. Его синтаксис —

Чтобы загрузить URL-адрес веб-сайта в WebView, вам необходимо вызвать метод loadUrl(String url) класса WebView, указав требуемый URL-адрес. Его синтаксис:

Помимо простой загрузки URL-адреса, вы можете лучше контролировать свой WebView, используя методы, определенные в классе WebView. Они перечислены следующим образом —

Этот метод указывает, что в WebView есть элемент предыдущей истории.

может идти вперед()

Этот метод указывает, что WebView имеет элемент истории переадресации.

очистить историю()

Этот метод очистит предыдущую и предыдущую историю WebView.

Этот метод уничтожает внутреннее состояние WebView.

findAllAsync (поиск строки)

Этот метод находит все экземпляры строки и выделяет их.

получитьПрогресс()

Этот метод получает ход текущей страницы.

Этот метод возвращает заголовок текущей страницы.

Этот метод возвращает URL-адрес текущей страницы.

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

Пример

Вот пример, демонстрирующий использование WebView Layout. Он создает базовое веб-приложение, которое попросит вас указать URL-адрес и загрузит этот URL-адрес веб-сайта в WebView.

Чтобы поэкспериментировать с этим примером, вам нужно запустить его на реальном устройстве, на котором работает Интернет.

td>
Шаги Описание
1 Вы будете использовать Android Studio для создания приложение Android в пакете com.example.sairamkrishna.myapplication.
2 Измените файл src/MainActivity.java, чтобы добавить код WebView.
3 Измените res/layout/activity_main, чтобы добавить соответствующие компоненты XML
4 Измените AndroidManifest.xml, чтобы добавить необходимые разрешения
5 Запустите приложение, выберите работающее устройство Android и установите приложение на и проверьте результаты.

Ниже приведено содержимое измененного файла основного действия src/MainActivity.java.

Ниже показано измененное содержимое файла res/layout/activity_main.xml в формате xml.

Ниже приведено содержимое файла res/values/string.xml.

Ниже приведено содержимое файла AndroidManifest.xml.

Значок запуска Eclipse

Давайте попробуем запустить ваше приложение WebView. Чтобы запустить приложение из студии Android, откройте один из файлов действий вашего проекта и щелкните значок «Выполнить» на панели инструментов. Студия Android будет отображаться, как показано ниже

Теперь просто укажите URL-адрес в поле URL-адреса и нажмите появившуюся кнопку обзора, чтобы запустить веб-сайт. Но перед этим убедитесь, что вы подключены к Интернету. После нажатия кнопки появится следующий экран —

Учебное пособие по Android WebView

Примечание. Просто изменив URL-адрес в поле URL, ваш WebView откроет нужный веб-сайт.

Что такое ошибка err_unknown_url_scheme Android WebView?

err_unknown_url_scheme сообщение об ошибке

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

Доминирование Android

Android — основная операционная система (ОС) для мобильных устройств. Android может похвастаться долей рынка 71%, за ней следует iOS от Apple с долей рынка 27%. Google купила Android Inc. в 2005 году, чтобы контролировать будущее развитие Android и загружать ОС Android на все свои мобильные устройства. Все остальные крупные производители мобильных устройств, кроме Apple, используют Android. Устройства Samsung, OnePlus, Huawei, Motorola, Nokia, LG и Sony поставляются с предустановленной ОС Android. Кроме того, значительно проще разрабатывать и размещать приложения в Google Play Маркете, чем в Apple App Store.

Эти факторы способствовали формированию сильного сообщества разработчиков Android. Разработчики Android используют встречи и конференции, Slack и Reddit, блоги и форумы, а также Stack Overflow, чтобы общаться и учиться друг у друга. Многие разработчики являются самоучками и полагаются на знания сообщества Android, чтобы устранять постоянные ошибки и ошибки программирования.

Android Studio — единственная официальная среда разработки для Android. Android Studio была создана с использованием программного обеспечения JetBrains, той же компании, которая разработала множество других популярных IDE (интегрированных сред разработки) для таких языков, как Python (Pycharm), PHP (PhpStorm) и Java (IntelliJ IDEA).

Панель управления Android Studio

Что такое нативные приложения? Как они связаны с ошибкой err_unknown_url_scheme?

Нативные приложения доступны в Google Play Store или App Store. Это полностью разработанные приложения, которые устанавливаются непосредственно на мобильное устройство. Нативные приложения сохранят большую часть своей функциональности, даже если они не подключены к Интернету или мобильным сетям. Они отличаются от веб-приложений, которые представляют собой просто веб-сайты. Веб-приложения легче разрабатывать, но они не имеют доступа к таким системным функциям, как GPS.

В качестве разработчика вы можете создать нативное приложение, но при этом предоставить доступ к веб-контенту. Это делается с помощью WebView. WebView — это специальный класс, который позволяет отображать веб-контент в вашем родном приложении. Например, если на вашем телефоне установлено собственное приложение Facebook, и вы нажмете внешнюю ссылку, веб-страница загрузится в приложении. Вы можете перемещаться по загруженной веб-странице, получать доступ к другим частям веб-страницы, делать покупки и взаимодействовать. Во встроенном браузере не будет адресной строки для поиска пользователем. Это дает разработчику возможность одновременно использовать преимущества веб-приложения и нативного приложения.

Приложение WebView разработка в Android Studio

3 способа исправить ошибку err_unknown_url_scheme

1. Открыть в новом окне

Быстрым и простым временным решением является редактирование кода href URL. Добавив target="_blank" вы можете решить проблему окольным путем. Теперь добавление этого фрагмента кода может иметь нежелательный эффект при разработке, поскольку эта ссылка теперь будет открываться в новом окне.

Рекомендуется избегать открытия дополнительных окон браузера. Это связано с тем, что новый браузер может беспокоить или сбивать с толку вашего пользователя. Удалив кнопку «назад», пользователям будет сложнее перемещаться и возвращаться на предыдущую страницу в вашем приложении. Стандартным является target="_self", который открывает ссылку на той же странице браузера.

Ниже приведен пример кода href URL с добавленным target="_blank":

2. Добавить новое намерение для загрузки во внешнем приложении

В разработке для Android намерения используются, чтобы сообщить Android, что вы хотите, чтобы приложение делало, по сути, позволяя вызывать определенное действие или компонент. Некоторые ошибки схемы можно исправить, добавив намерение для загрузки во внешнем приложении. Например, загрузка mailto:// во внешнем приложении должна привести к тому, что ссылка электронной почты откроется в почтовом приложении по умолчанию. Другой пример — maps://, который должен открываться в вашем приложении карт по умолчанию.

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

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

3. Отключить любые нестандартные схемы URL

Если в вашем приложении есть одна из этих схем или пользователь каким-то образом переходит по ссылке, используя эти схемы, появится всплывающее сообщение. Сообщение «Ошибка: неизвестный тип ссылки» сообщит пользователю, что он не может продолжить. Ниже приведен пример этого метода:

WebView имеет большие преимущества, но требуется творческий подход к кодированию

Android WebView действительно предоставляет лучшее из обоих миров для разработчиков Android, но в некоторых ситуациях необходимы творческие обходные пути. Используя WebView для отображения встроенного браузера в собственном приложении, вы получаете все преимущества как собственного приложения, так и веб-приложения. Вы сможете использовать нативные системные API в своем веб-коде, что обычно ограничено.

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