Как встроить браузер в приложение
Давайте создадим новое приложение - браузер для android устройств, своими руками, это будет интересно, и кода будет не очень много.
Приложение-браузер для android
Android Studio подготовит файлы проекта, это займет некоторое время. В главном окне будет открыты два файла, main.xml и MainActivity.java, начнем работать в последнем. Изменим extended AppCompactActivity на Activity, сохранимся.
Добавление разрешений в манифест
Затем откроем файл AndroidManifest.xml и добавим после первой секции пользовательское разрешение user-permission,
что бы наше приложение имело доступ в интернет. Сохраним и закроем AndroidManifest.xml.
Перейдем в файл Main.xml, он находится по пути res/layout/main.xml, удалим строку android:text="Hello Word!" полностью, изменим TextView на WebView, из свойств основного слоя RelativeLayout уберем ненужные отступы (paddingBottom, paddingLeft, paddingRight,paddingTop).
Для WebView добавим свойство android:id="@+id/webView",изменим android:layout_width="wrap_content" и android:layout_height="wrap_content" на android:layout_width="match_parent" и android:layout_height="match_parent", для того, что бы наш элемент WebView был на весь экран.
Кодим логику на Java
С файлом main.xml мы закончили, перейдем к MainActivity.java. Добавим переменную wv типа WebView, присвоим ей элемент, найдя его с помощью функции findViewById(), опишем настройки wv, в частности разрешим в WebView выполнять java скрипты, укажем адрес загрузки сайта в наш браузер, я для примера запущу Яндекс, применив функцию loadUrl("http://ya.ru").
Так же ниже напишем обработку нажатия кнопки назад на устройстве.
Запуск приложения в эмуляторе
Нажмем кнопку Start, это зеленый треугольник на панели инструментов AndroidStudio, запустится наш эмулятор, и если все сделано правильно, через некоторое время в браузере запустится поиск Яндекс, можно понажимать на виртуальную клавиатуру и что-то поискать, все работает хорошо.
Закроем программу, не закрывая сам эмулятор, нажав на красный прямоугольник, это Stop вместо Start, изменим адрес на произвольный, я «пропиарю» свой сайт "https://maxfad.ru",
нажму сохранить и снова запущу программу, на этот раз все произойдет быстрее, поброжу по сайту, в разделе Программирование для андроид есть статьи и видео как установить и настроить AndroidStudio, сделать эмулятор android и простые примеры программ.
Полный текст AndroidManifest.xml
Полный текст main.xml
Полный текст MainActivity.java
В этом видео подробно показано как создать приложение-браузер для android устройств:
Рекомендуем смотреть видео в полноэкранном режиме, в настойках качества выбирайте 1080 HD, не забывайте подписываться на канал в YouTube, там Вы найдете много интересного видео, которое выходит достаточно часто. Приятного просмотра!
В определенный момент мне стало некомфортно использовать стандартный контрол WebBrowser, предлагаемый Visual Studio.
Причин было несколько:
1. Использовался IE-движок, что само по себе уже сильный аргумент.
2. Кривая работа с JS.
3. Отсутствие масштабирования.
4. Если запустить на машине, где стоит IE6, то все его «достоинства» переносятся на приложение.
В итоге был начат поиск альтернативных решений.
Было рассмотрено 2 SDK. xulrunner(Mozilla) и Awesomium(Chrome)
Подключение обоих происходит примерно одинаково, но на всякий случай опишу оба.
По данной ссылке заходим в папку с выбранной версией, далее sdk/xulrunner-X.X.en-US.win32.sdk.zip
шаг 2
Скачиваем и распаковываем содержимое. Нас интересует из архива только папочка bin. Копируем ее в папку с приложением и переименовываем в xulrunner. Имя можно и другое, но чтобы не было различий с моим описанием, лучше имя сделать такое.
шаг 4
В нашем приложении добавляем в References Skybound.Gecko.dll из скачанного архива
шаг 5
Правим класс Program:
Инициализируем контрол браузера:
По данному коду родительской панелью будет panel1
шаг 6
Чтобы выполнить программно какой-либо JavaScript пришлось идти на ухищрения, т.к. то ли функции, которые для этого по идее предназначены не дописаны в этой версии, то ли что-то еще. Но выход я нашел только такой:
Минусом является то, что нельзя получить результат обработки, только в виде alert();
Данная проблема также стала причиной того, что я начал искать замену и пришел к Awesomium
шаг 2
Подключаем к проекту библиотеки
Awesomium.Core.dll
Awesomium.Windows.Forms.dll
шаг 3
В Toolbox кликаем правой кнопкой и выбираем Choose Items. Далее жмем browse и подключаем Awesomium.Windows.Forms.dll, после этого у нас появится новые контролы WebControl, AddressBox и т.д. Нам в первую очередь важен WebControl
шаг 4
Размещаем контрол в дизайне
шаг 5
Примеры использования различных функций.
500 — это таймаут.
Вызов JS функции
al — это имя функции
второй параметр передает значения в фунцию. В данном случае он пустой.
Приведенные примеры работают на Awesomium 1.6.5, в версии 1.7 немного изменена архитектура и некоторые методы могут отсутствовать или вызываться по другому.
Выводы
На текущий момент во всех проектах, где нужен браузер, использую Awesomium: он и работает стабильнее и функционал побогаче. Нагрузка от него небольшая. Единственный минус — это то, что не отрабатывает клик правой кнопкой по флешу, потому нельзя поменять необходимые параметры(возможно я просто не разобрался как). В остальном данная SDK меня во всем устроила.
Сабж. И до сих пор нету стандартного способа встрить браузер по-умолчанию, установленный в системе, в мое приложение. И это при том, что систем без браузеров не существует, а стандарнтое API до сих пор не запилили в браузерах.
странно. помню еще в Delphi 7 была такая шляпа в одном из пакетов
Под вендой встраивался всегда IE и оно там всегда было. но mozilla и webkit ничего стандартного не предоставяют. Есть всякие недо-поделки или проприетарщина. А так чтобы это было фичей браузера - хрен!
лол, вызывай системный браузер из приложения - в чем проблема?
в нормальных DE есть переменная, определяющая дефолтный браузер
до сих пор нету стандартного способа встрить браузер по-умолчанию, установленный в системе, в мое приложение
Наверное оно и к лучшему.
invy ★★★★★ ( 16.07.15 17:00:26 )Последнее исправление: invy 16.07.15 17:01:11 (всего исправлений: 1)
webkit и есть браузер, в чём проблема?
У меня браузером по умолчанию в Windows стоит Chrome. Дай пример кода на этом API, который встраивает Chrome.
Такого нет и не будет в ОС Ubuntu, ОС Debian GNU/Linux и прочих сходных. Потому, что дефолтный браузер в любой из них может поменяться когда угодно. И его пилят не разработчики ОС. А разработчикам браузеров побоку, что там происходит в этом зоопарке. Тем более они не будут поддерживать один LTS для убунты и другой — для дебианов.
Мог бы и пошире дырень в безопасности придумать.
Хм, интересно, а есть ли вообще генерик-вэй для отрисовки чужих приложений? Ну, типа mplayer -wid <window_id>, только чтобы работало со всеми приложениями.
В венде только IE встроить можно. Да и не браузер, а двиг. А так - встраивай тот же webkit в своё приложения.
В общем — жуй то, что в твоём тулките — webkit, gtkhtml или что там есть. Оно хуже, чем API IE, но этим хотя бы можно пользоваться.
Проблема в том, что его ндао за собой таскать. Я, когда встраиваю браузер, не хочу вообще знать, какой движок в системе, а хочу только использовать некое стандартное API.
Для этого нужен стандарт, который бы все уважающие себя браузеры реализовывали и предоставляли своё API. Это зависит по большому счету только от разработчиков браузеров.
Этот быстрый совет показывает, как запустить встроенное приложение браузера тремя способами. Сначала вы узнаете, как запустить браузер по определенному URL. Во-вторых, вы узнаете, как создавать текст со ссылками. В-третьих, вы узнаете, как запустить веб-поиск Google и указать критерии поиска. Вы достигнете этих целей, создав и настроив соответствующие Intents в классе Activity вашего приложения.
Шаг 1. Создайте приложение для Android
Начните с создания проекта Android. Реализуйте свое Android-приложение как обычно. После настройки проекта и запуска приложения решите, при каких обстоятельствах вы хотите запустить браузер. Будет ли это происходить при нажатии кнопок управления? Реализуйте необходимые элементы управления, которые будут запускать функции просмотра веб-страниц или поиска в приложении, включая любую обработку кликов. После того, как вы выполнили эти задачи, у вас есть места, куда можно вставить код для запуска браузера или веб-поиска. Теперь вы готовы продолжить этот быстрый совет.
Вы можете следовать вместе с нашим проектом: HelloWorldWideWeb, который доступен как открытый исходный код .
Шаг 2. Работа с URI
Android использует объекты Uri (Uniform Resource Identifier) для определения уникального местоположения фрагмента данных. Объекты Uri часто используются для указания данных, которые должен использовать Intent. В этом случае мы создадим объект Uri из веб-URL, используя метод parse ():
Шаг 3: Создание намерения
Вы можете просмотреть содержимое HTML с помощью следующего намерения: android.content.Intent.ACTION_VIEW. Начните с создания Intent этого типа и укажите URI, который вы создали выше, как показано ниже, в вашем обработчике нажатия кнопок:
Шаг 4: запуск намерения
При запуске этого намерения любые приложения, которые могут отображать Интернет, смогут обработать этот запрос. После того, как вы установили данные типа для Intent, вы можете вызвать метод startActivity (), передав свой Intent:
Когда вы нажимаете эту кнопку, приложение Browser (которое обычно обрабатывает отображение содержимого HTML) запускается на веб-сайте, который вы указали.
На следующем скриншоте показано, как это выглядит.
Текст для @ string / Содержит_линки дословно соответствует тому, что вы видите на экране. Никаких специальных команд форматирования или тегов в строке не требуется.
Шаг 6. Включение веб-поиска
Если вы хотите предоставить пользователю возможность выполнять поиск в Интернете, вы все равно можете использовать намерение ACTION_VIEW и настроить строки запроса, соответствующие конкретной поисковой системе, или, если вы довольны поиском Google, вы можете просто использовать Цель поиска в Интернете: android.content.Intent.ACTION_WEB_SEARCH. Начните с создания Intent этого типа, как показано ниже, в вашем втором обработчике нажатия кнопки:
Шаг 7: Предоставление критериев поиска
Часто вы хотите указать критерии для поиска. Вы можете сделать это, предоставив эту информацию как часть дополнений Intent. Назначение ACTION_WEB_SEARCH специально использует дополнительное поле SearchManager.QUERY для критериев поиска. Например, чтобы выполнить поиск Google для карликовых коз, вы настраиваете дополнительный SearchManager.QUERY и запускаете браузер следующим образом:
Когда вы нажимаете эту кнопку, приложение Browser (которое обычно обрабатывает отображение содержимого HTML) запускается на веб-сайте, который вы указали.
Замечание о разрешениях . Хотя ваше приложение использует возможности браузера на устройстве, таких разрешений не требуется. Это связано с тем, что приложение не отображает веб-контент напрямую. Вместо этого он просто использует возможности других приложений.
Стать браузером
Для более точного управления веб-контентом в ваших приложениях вы захотите использовать элемент управления WebView. Это специальное представление позволяет точно контролировать рендеринг веб-контента. Однако этот элемент управления потребует, чтобы у вашего приложения были соответствующие разрешения для этого, и это, друзья, обсуждается в руководстве прямо здесь, на Mobiletuts +!
Вывод
Из этого краткого совета вы узнали, как настроить Intent для запуска браузера и выполнения поискового запроса. Эта функция может быть очень полезна для приложений, желающих использовать веб-контент в своих приложениях.
Читайте также: