Как сделать браузер на андроид

Обновлено: 07.07.2024

При переходе по ссылке из приложений система Android предлагает выбрать браузер, в котором будет открыт сайт. Также может осуществляться автоматический переход в программу, которая практически не используется по разным причинам. Установить или изменить обозреватель можно по умолчанию самостоятельно. В «Блоге системного администратора» разберем, как это можно сделать.

Браузер по умолчанию – что это такое

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

Как изменить или установить браузер по умолчанию

Изменить обозреватель по умолчанию можно через системные настройки операционной системы. Также это делается с помощью параметров браузера. Разберем, как это можно сделать несколькими способами.

Способ 1: системные настройки

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

1. Откройте главное меню Android, затем найдите пункт «Настройки». В 11 версии ОС открыть параметры системы можно через верхнюю шторку, если смахнуть ее вниз и выбрать иконку в виде шестеренки.


2. Откройте раздел «Приложения» в списке.

3. В перечне установленного софта отыщите предпочтительный браузер и тапните по его названию.


4. В блоке «Параметры по умолчанию» нажмите на пункт «Веб-браузер».

5. Откроется окно, где отобразятся браузеры, установленные на смартфоне.

6. Отметьте нужный пункт.


Таким же образом настраиваются и другие приложения. Например, для открытия мультимедийных файлов или документов.

Способ 2: всплывающее окно при переходе по ссылке

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


В некоторых версиях операционной системы Android открывается чек-бокс, где нужно отметить тот обозреватель. Если выбрать пункт «Запомнить этот выбор», то он всегда будет открываться при переходе по ссылке.

Способ 3: параметры браузера

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

1. Запустите Яндекс.Браузер и тапните по иконке в виде трех вертикальных точек, которая находится слева от «умной адресной строки».

2. Выберите раздел «Браузер по умолчанию».


3. Во всплывающем окне выберите нужный вариант и подтвердите действие.

Поменять браузер по умолчанию на устройстве, работающем на базе Android, можно несколькими способами через системные настройки или с помощью параметров программы, если они предусмотрены. А ранее мы рассматривали, как записать видео с экрана Android в Google Play Игры. Напишите в комментариях, каким браузером пользуетесь вы.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Давайте создадим новое приложение - браузер для 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",

Приложение-браузер для android устройств

нажму сохранить и снова запущу программу, на этот раз все произойдет быстрее, поброжу по сайту, в разделе Программирование для андроид есть статьи и видео как установить и настроить AndroidStudio, сделать эмулятор android и простые примеры программ.

Полный текст AndroidManifest.xml

Полный текст main.xml

Полный текст MainActivity.java

В этом видео подробно показано как создать приложение-браузер для android устройств:

Рекомендуем смотреть видео в полноэкранном режиме, в настойках качества выбирайте 1080 HD, не забывайте подписываться на канал в YouTube, там Вы найдете много интересного видео, которое выходит достаточно часто. Приятного просмотра!

На первом экране приложения у нас будет кнопка, отправляющая Intent. На втором экране будет WebView.

Project name: P0321_SimpleBrowser
Build Target: Android 2.3.3
Application name: SimpleBrowser
Package name: ru.startandroid.develop.p0321simplebrowser
Create Activity: MainActivity

Рисуем main.xml

На экране просто кнопка

Кодим MainActivity.java:

Код немного непривычен. Обратите внимание я нигде не описываю объект класса Button. Метод findViewById возвращает View, и это View поддерживает метод setOnClickListener, который я вызываю. А в методе setOnClickListener я создаю объект, реализующий интерфейс OnClickListener и в нем пишу код в onClick. Также я создаю объект Intent не отдельно, а прямо в методе startActivity. Кода меньше получилось, чем обычно. Может быть вам подойдет такой вариант.

Создадим второе Activity. Сначала layout-файл browser.xml:

На экране компонент WebView.

Создаем BrowserActivity.java:

Определяем WebView, читаем data из Intent и передаем строку в WebView.


Не забываем про Category = Default. Label для BrowserActivity укажите, например, MyBrowser.

Также в манифесте надо добавить Uses Permission = android.permission.INTERNET на вкладке Permissions. Чтобы система дала приложению доступ в интернет.



Выбираем наше MyBrowser и видим страницу.


Мы увидели, что Activity в наших приложениях могут обрабатывать не только наши придуманные action, но и системные. И, тем самым, создавать альтернативу системным приложениям.

Т.е. для Activity можно создать Intent Filter, который будет сообщать системе, что приложение умеет что-то, но, при этом, внутри Activity будет какая-нибудь ерунда. Это уже вопросы программерской этики, здравого смысла и адекватности )

Полный код манифест-файла:

На следующем уроке:

- хранение данных с помощью Preferences

- в чатах решаем возникающие вопросы и проблемы по различным темам: Android, Kotlin, RxJava, Dagger, Тестирование

- ну и если просто хочется поговорить с коллегами по разработке, то есть чат Флудильня

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

image

Забегая вперед, вот что получилось:


12:56. Я буду делать это параллельно с написанием топика (так интересней). По ходу написания клиента поясняя все шаги. Итак, покурили, налили чай, подготовили плейлист и, пока чай остывает — проверяем не занято ли имя habrahabr в маркете. Отлично, переходим к созданию приложения.

13:02 Создаем новый проект.
Скриншот

API level равен 4, по той причине, что при меньшем значении — на планшетниках Samsung Galaxy Tab разрешение экрана будет некорректным и обладатели данных чудо-девайсов не преминут насовать вам кучу минусов в маркет (хотя в принципе, врятли это косяк разработчика).

13:08 Фиксим манифест.
Необходимо добавить две строчки:
— android:configChanges=«orientation», данная строка нужна для того, чтобы при смене ориентации экрана не разрушалось наше активити.
— <uses-permission android:name=«android.permission.INTERNET» />, запрашиваем разрешение на доступ в интернет
AndroidManifest
* играет front242 — headhunter v3.0

13:13 Фиксим layout.
Стираем всё и добавляем один единственный элемент — webview — на весь экран

13:16 Иконка.
При помощи фаербага подрезаем абсолютную ссылку и при помощи фотошопа обрезаем до 48*48 px и кидаем в res/drawable…

13:27 С иконкой всё сложнее оказалось. Пятно логотипа после уменьшения превратилось в мутную хрень, пришлось нагуглить. Надеюсь автор не обидится.

Уф, самое сложное закончили, наконец то можно покодить.

13:39 Загружаем хабр

public class habr extends Activity

private WebView wv;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState);
setContentView(R.layout.main);

wv = (WebView) findViewById(R.id.wv);

WebSettings webSettings = wv.getSettings();
webSettings.setSavePassword( true );
webSettings.setSaveFormData( true );
webSettings.setJavaScriptEnabled( true );

* This source code was highlighted with Source Code Highlighter .

* Здесь мы просто натравили наше вью на habr, предварительно включив джаваскрипт и запоминалку форм/паролей. Выглядит пока уродливо, но уже работает. Перекур.

13:53 Продолжаем разговор.

public class habr extends Activity

private WebView wv;
private String LASTURL = "" ;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState);
this .getWindow().requestFeature(Window.FEATURE_PROGRESS);
setContentView(R.layout.main);

wv = (WebView) findViewById(R.id.wv);

WebSettings webSettings = wv.getSettings();
webSettings.setSavePassword( true );
webSettings.setSaveFormData( true );
webSettings.setJavaScriptEnabled( true );

final Activity activity = this ;

wv.setWebChromeClient( new WebChromeClient() public void onProgressChanged(WebView view, int progress)
activity.setTitle( " " +LASTURL);
activity.setProgress(progress * 100);

if (progress == 100)
activity.setTitle( " " +LASTURL);
>
>);
wv.setWebViewClient( new WebViewClient() public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) Toast.makeText(getApplicationContext(), "Error: " + description+ " " + failingUrl, Toast.LENGTH_LONG).show();
>

@Override
public boolean shouldOverrideUrlLoading(WebView view, String url)
if (url.indexOf( "habrahabr" )<=0) // the link is not for a page on my site, so launch another Activity that handles URLs
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity(intent);
return true ;
>
return false ;
>

public void onPageStarted (WebView view, String url, Bitmap favicon) LASTURL = url;
>

public void onPageFinished (WebView view, String url)

* This source code was highlighted with Source Code Highlighter .

Итак, нам нужен градусник загрузки.
1. Запрашиваем фичу: this.getWindow().requestFeature(Window.FEATURE_PROGRESS);
2. На прогрессчейндж — заполняем окно градусника
activity.setTitle(" "+LASTURL);
activity.setProgress(progress * 100);
if(progress == 100) activity.setTitle(" "+LASTURL);
3. На начало загрузки запоминаем url в переменной LASTURL = url;

14:05 Фиксим вёрстку.
Немного теории. На загруженной странице можно выполнить джаваскрипт. Если например набрать в адресной строке браузера что то вроде javasсript:alert(document.body.innerHTML) — то мы увидим тело страницы (копипастерам — в примере выше — буква «с» — русская, чтобы парсер пропустил).
Ну а дальше — дерево ДОМ и т.д., твори что хочешь, хоть полностью страницу переделывай. Однако мы не зайдем так далеко (я надеюсь) и просто скроем сайдбар, для улучшения читабельности. А браузер уже сам растянет полезный контент по странице. Итак, пробуем добавить обработчик на окончание загрузки страницы:

* This source code was highlighted with Source Code Highlighter .

/* Отвлекли по работе */
Такс, сайдбар скрывается, но с неким скачком. Фиксим загрузку изображений:

14:34 Ускоряем загрузку
Для этого отключим картинки при старте страницы:
view.getSettings().setLoadsImagesAutomatically(false);
и включим на финише, после хака с джаваскриптом:
view.getSettings().setLoadsImagesAutomatically(true);

Такс, грузить контент стал ощутимо быстрее (на моей полуживой Йоте, в эмуляторе, по крайней мере)

15:23 Продолжаем разговор
Пока ходил на обед — заглянул в зону бесплатного вайфая, заодно и потестил. С сожалением узрел панель поиска, нелепо висящую в пустом правом углу. Попробуем с ней чтоть сделать.
Для начала тупо скроем.

* музыка: submatakana — the krypt (это что то с чем то)

* This source code was highlighted with Source Code Highlighter .

Мда, ломать не строить. Такс, попробуем «приаппендить её к списку блогов.

"var parent = document.getElementsByClassName('page-navigation')[0];" +
"var panel = document.getElementsByClassName('panel-tools')[0];" +
"var div = document.createElement('div');" +
"div.innerHTML = panel.innerHTML;" +
"parent.appendChild(div);" +

* This source code was highlighted with Source Code Highlighter .

опс, теперь у нас две панели)

* This source code was highlighted with Source Code Highlighter .

15:57 Опс, одна кавычечка не там и весь скрипт рушится как карточный домик.
Надо так: div.style['margin-left'] = '30px';
Так попробую ещё вырубить рекламные блоки в меню, но нет так нет, что то я долго вожусь с грешной вёрсткой (ненавижу).

16:04 Так как данные элементы не поименованы — попробовал так:

* This source code was highlighted with Source Code Highlighter .

16:16 Попробуем ударить по площадям:

"var imgs=document.getElementsByTagName('IMG');for(var i=0;i<imgs.length;i++) " +

* This source code was highlighted with Source Code Highlighter .

Картинки скрылись, но пустое место всё равно торчит( Ладно, пусть это останется на домашнее задание желающим. Пусть пока живут на радость рекламодателям.
Перекур.

16:45 Поиск, пожалуй вернем назад, немного ужав по ширине:

"var panel = document.getElementById('search');" +
"panel.style['width'] = '55px';" +

* This source code was highlighted with Source Code Highlighter .

Ну и займемся наконец андроидом.
16:47 Перекрываем аппаратную кнопку назад.

  1. @Override
  2. public boolean onKeyDown( int keyCode, KeyEvent event )
  3. if ((keyCode == KeyEvent.KEYCODE_BACK) && wv.canGoBack())
  4. wv.goBack();
  5. return true ;
  6. >
  7. return super.onKeyDown(keyCode, event );
  8. >

16:57 Создаем меню

Здесь пояснять особо даже и ничего вроде…
Вебвью хранит данные в локальном изолированном кеше и функция clearCache — удаляет закешированные картики и т.п.

В маркет пользователя отправляем при помощи интента + старт активити, это стандартный механизм взаимодействия с внешними приложениями.

17:01 Такс, пожалуй, стоит сделать режим с картиками/без картинок
Фиксим меню:
menu.add(0, 6, 0, „IMG ON“);
menu.add(0, 7, 0, „IMG OFF“);

17:05 Мутим функции сохранения настроек

В неё будем передавать настройки (грузить или нет картинки), а она пусть запихивает в переменную переданное значение.
(выше объявили константу PREFS_NAME — это как бы имя конфига)

Теперь просто вызываем её в обработчике меню:

  1. case 6:
  2. saveSettings( true );
  3. break ;
  4. case 7:
  5. saveSettings( false );
  6. break ;

17:18 И читаем константу при создании приложения из нашего конфига

  1. SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
  2. imgOn = settings.getBoolean( "IMGMODE" , false );
  3. webSettings.setLoadsImagesAutomatically(imgOn);

17:19 Тестируем ещё раз

17:25 Вроде косяков нет. Экспортируем проект.
В эклипсе это правая кнопка на проекте экспорт и запускается мастер, позволяющий создать/выбрать сертификат и упаковывающий проект. Далее топаем в маркет

17:38 Публикуем.
На самом деле не самая простая задача. Где то надо добыть кучу промографики определенного размера, поэтому не дизайнерам тут тяжко.

По параметрам.
— Чтобы установить основным языком приложения русский — надо сперва добавить русский, и только после этого появится возможность удалить английский.
— В полях дескрипшн и промотекст желательно упомянуть ключевые слова, по которым могут искать приложение.
— Если устновить цену free — потом сделать его платным — невозможно
— Не ставьте галку copy protection, приложение не будет ставиться на часть девайсов
— Лучше укажите все страны, даже если приложение только для русскоязычных, например.

Мда, с иконкой не очень красиво получилось( Почему то меня гложет эта мысль. Так что если кто-ть может изобразить чтоть 48*48 — буду премного благодарен.

Полностью, итоговый исходник:

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