Статьи

Урок 32. Пишемо простий браузер

У цьому уроці:

- пишемо простий браузер

На минулому уроці ми побачили, що якщо викликати Intent з action = ACTION_VIEW і data = Uri- об'єкт з http-адреси, то запускається браузер і відображає вміст сторінки з цього http-адресою. Ми можемо самостійно зробити найпростіший браузер, який буде реагувати на такий Intent і просто відобразить сторінку. Для цього треба налаштувати Intent Filter і використовувати компонент WebView.

На першому вікні у нас буде кнопка, яка відправляє 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

<? Xml version = "1.0" encoding = "utf-8"?> <LinearLayout xmlns: android = "http://schemas.android.com/apk/res/android" android: layout_width = "fill_parent" android: layout_height = "fill_parent" android: orientation = "vertical"> <Button android: id = "@ + id / btnWeb" android: layout_width = "wrap_content" android: layout_height = "wrap_content" android: text = "web"> </ Button > </ LinearLayout>

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

Кодима MainActivity.java:

package ru.startandroid.develop.p0321simplebrowser; import android.app.Activity; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; public class MainActivity extends Activity {/ ** Called when the activity is first created. * / @Override public void onCreate (Bundle savedInstanceState) {super.onCreate (savedInstanceState); setContentView (R.layout.main); (FindViewById (R.id.btnWeb)). SetOnClickListener (new OnClickListener () {@Override public void onClick (View v) {startActivity (new Intent (Intent.ACTION_VIEW, Uri.parse ( "http: //www.ya. ru ")));}}); }}

Код трохи незвичний. Зверніть увагу я ніде не описую об'єкт класу Button. Метод findViewById повертає View, і це View підтримує метод setOnClickListener, який я викликаю. А в методі setOnClickListener я створюю об'єкт, який реалізує інтерфейс OnClickListener і в ньому пишу код в onClick. Також я створюю об'єкт Intent не окремо, а прямо в методі startActivity. Коду менше вийшло, ніж зазвичай. Може бути вам підійде такий варіант.

Отже, ми після натискання на кнопку запускаємо Intent, який означає, що ми хочемо переглянути сайт http://www.ya.ru .

Створимо другий Activity. Спочатку layout-файл browser.xml:

<? Xml version = "1.0" encoding = "utf-8"?> <LinearLayout xmlns: android = "http://schemas.android.com/apk/res/android" android: layout_width = "match_parent" android: layout_height = "match_parent" android: orientation = "vertical"> <WebView android: id = "@ + id / webView" android: layout_width = "match_parent" android: layout_height = "match_parent"> </ WebView> </ LinearLayout>

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

Створюємо BrowserActivity.java:

package ru.startandroid.develop.p0321simplebrowser; import android.app.Activity; import android.net.Uri; import android.os.Bundle; import android.webkit.WebView; public class BrowserActivity extends Activity {@Override protected void onCreate (Bundle savedInstanceState) {super.onCreate (savedInstanceState); setContentView (R.layout.browser); WebView webView = (WebView) findViewById (R.id.webView); webView.setWebViewClient (new WebViewClient ()); Uri data = getIntent (). GetData (); webView.loadUrl (data.toString ()); }}

Визначаємо WebView, читаємо data з Intent і передаємо рядок в WebView.

Тепер пропишемо Activity в маніфесті. До нього нам треба буде додати Intent Filter, в ньому вказати action = ACTION_VIEW. А для data ми бачимо кілька параметрів, використовуємо Scheme = http.

А для data ми бачимо кілька параметрів, використовуємо Scheme = http

Це означає, що Uri об'єкт в Intent повинен містити http-адреса.

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

Також в маніфесті треба додати Uses Permission = android.permission.INTERNET на вкладці Permissions. Щоб система дала додатком доступ в інтернет.

Все збережемо і запустимо додаток. Тиснемо кнопку і бачимо вибір: система пропонує нам на вибір системний браузер і наш, тільки що зроблений. Тобто Intent c запитом на перегляд http-адреси знайшов в системі два Activity, які в своїх Intent Filter заявили, що вміють відображати http-адреси.

Тобто  Intent c запитом на перегляд http-адреси знайшов в системі два Activity, які в своїх Intent Filter заявили, що вміють відображати http-адреси

Вибираємо наше MyBrowser і бачимо сторінку.

Ми побачили, що Activity в наших додатках можуть обробляти не тільки наші придумані action, а й системні. І, тим самим, створювати альтернативу системним додатків.

Але, як ви розумієте, ми запросто могли в нашому Activity не використовувати WebView і не показувати сторінку. Можна було використовувати TextView і в ньому просто відобразити у вигляді тексту адреса з data. Або накодо http-запит, який скачав би цю сторінку і відобразив її html-вміст. Ми могли взагалі забити на http-адреса і показати якусь картинку ліву або просто темний екран.

Тобто для Activity можна створити Intent Filter, який буде повідомляти системі, що додаток вміє щось, але, при цьому, всередині Activity буде якась дурниця. Це вже питання программерскую етики, здорового глузду і адекватності)

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

<? Xml version = "1.0" encoding = "utf-8"?> <Manifest xmlns: android = "http://schemas.android.com/apk/res/android" package = "ru.startandroid.develop.p0321simplebrowser "android: versionCode =" 1 "android: versionName =" 1.0 "> <uses-sdk android: minSdkVersion =" 10 "> </ uses-sdk> <uses-permission android: name =" android.permission.INTERNET "> </ uses-permission> <application android: icon = "@ drawable / ic_launcher" android: label = "@ string / app_name"> <activity android: label = "@ string / app_name" android: name = ". MainActivity"> <intent-filter> <action android: name = "android.intent.action.MAIN"> </ action> <category android: name = "android.intent.category.LAUNCHER"> </ category> </ intent-filter > </ activity> <activity android: label = "MyBrowser" android: name = "BrowserActivity"> <intent-filter> <action android: name = "android.intent.action.VIEW"> </ action> <data android : scheme = "http"> </ data> <category android: name = "android.intent.category.DEFAULT"> </ category> </ intent-filter> </ activity> </ application> </ manifest>

На наступному уроці:

- зберігання даних за допомогою Preferences

Приєднуйтесь до нас в Telegram:

- в каналі StartAndroid публікуються посилання на нові статті з сайту startandroid.ru і цікаві матеріали з Хабра, medium.com і т.п.

- в чатах вирішуємо ці запитання і проблеми з різних тем: Android , Kotlin , RxJava , Dagger , тестування

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

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


Encoding = "utf-8"?
Encoding = "utf-8"?
Encoding = "utf-8"?

Новости

Как оформить группу в вконтакте видео
Дано хотел свой магазин в вк, но не знал с чего начать его делать. Так как хотелось не банальный магазин с кучей ссылок и фото, а красиво оформленный. С меню, с аватаркой. После просмотра видео создал

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

Как создать фото из видео
Кризис заставляет искать дополнительные источники дохода. Одним из таких источников может стать торговля на валютном рынке Форекс. Но чтобы не потерять свои деньги необходимо работать с надежным брокером.

Как оформить диск малыш от рождения до года из фото и видео
Оформить диск "Малыш от рождения до года" из фото и видео можно совершенно разными способами! Кто-то для достижения данной цели идет на шоу-таланты, кто-то пользуется услугами профессионалов, а кто-то

Финансовые новости мира
Вернуться в раздел Профессия экономист Экономисты востребованы в компаниях, где требуется контролировать расходы, правильно рассчитывать средства, где необходим постоянный анализ экономической деятельности

Транспортное средство закон
Пункт 1.5. ПДД гласит: «Участники дорожного движения должны действовать таким образом, чтобы не создавать опасности для движения и не причинять вреда», а в пункте 1.2. указано: «Участник дорожного движения»

Квест кімната дніпро
Законопроект о запрете посещения квестов детьми младше 14 лет прокомментировал один из самых популярных в России квест-агрегаторов. Поправки в городской закон о мерах по предупреждению причинения вреда

Труба в изоляции Valsir Pexal
На сегодняшний день имеется масса самых разных отделочных материалов, которые можно использовать, как внутри, так и снаружи помещения в качестве декоративного элемента, однако большинство из них имеет

Роллы
От того, как и чем мы питаемся зависит очень многое. Это и самочувствие и внешность и общее состояние здоровья. Несмотря на широкое предложение, вопросы правильного и вкусного питания стоят очень остро.

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