Створимо новий проект MyBrowser і відразу замінимо код у файлі розмітки res / layout / activity_main.xml:
Так як додаток буде використовувати інтернет, необхідно встановити дозвіл на доступ до інтернету в файлі-маніфесті.
Там же в маніфесті модифікуємо рядок для екрану, видаливши заголовок з нашого застосування (виділено жирним):
Запустимо програму. У нашому розпорядженні з'явився найпростіший вьювер веб-сторінок, але з одним недоліком. Якщо ви клацнете на будь-якому посиланню, то у вас автоматично запуститься браузер за замовчуванням і нова сторінка відобразиться вже там.
Upd. Зараз я виявив, що тепер навіть під час запуску програми відразу відкривається браузер. Раніш такого не було.
Щоб вирішити дану проблему і відкривати посилання в своїй програмі, потрібно перевизначити клас WebViewClient і дозволити нашому додатку обробляти посилання. Додамо в коді вкладений клас:
Потім в методі onCreate () визначимо екземпляр MyWebViewClient. Він може знаходитися в будь-якому місці після ініціалізації об'єкта WebView:
Тепер в нашому додатку створений WebViewClient. який дозволяє завантажувати будь-який вказаний URL, обраний в WebView. в сам контейнер WebView. а не запускати браузер. За дану функціональність відповідає метод shouldOverrideUrlLoading (WebView, String). в якому ми вказуємо поточний WebView і потрібний URL. Значення, що повертається true говорить про те, що ми не потребуємо запуску стороннього браузера, а самостійно завантажимо контент за посиланням.
Повторно запустіть програму і переконайтеся, що посилання завантажуються тепер в самому додатку. Але тепер виникла ще одна проблема. Ми не можемо повернутися до попередньої сторінки. Якщо ми натиснемо на кнопку BACK (Назад) на своєму пристрої, то просто закриємо свій додаток. Для вирішення нової проблеми нам необхідно обробляти натискання кнопки BACK. Додаємо новий метод:
Ми повинні перевірити, що WebView підтримує навігацію на попередню сторінку. Якщо умова вірна, тоді викликається метод goBack (). який повертає нас на попередню сторінку на один крок назад. Якщо таких сторінок набралося кілька, то ми можемо послідовно повернутися до самої першій сторінці. При цьому метод завжди буде повертати значення true. Коли ми повернемося на найпершу сторінку, з якої почали подорож по інтернету, то повернеться значення false і обробкою натискання кнопки BACK займеться вже сама система, яка закриє вікні керування.
Якщо вам потрібно частина посилань, що ведуть на ваш сайт відкривати в браузері, а локальні посилання відкривати в додатку, то застосовуйте умова з різними повертаються значеннями.
Універсальний метод, який все локальні посилання відкриє в додатку, інші в браузері (міняємо одну сходинку):
А зараз трохи ускладнити приклад, щоб у користувача з'явилася альтернатива стандартним браузерам.
Щоб було зрозуміліше, переробимо приклад наступним чином. Створіть дві активності. На першій активності розмістіть кнопку для переходу на другу активність, а на другий активності розмістіть компонент WebView.
У маніфесті прописуємо у другій активності фільтр.
Код для кнопки для переходу на другу активність.
Друга активність повинна прийняти дані:
У фільтрі для другої активність ми вказали дві дії.
Це означає, що будь-які активності (читай, додатки) можуть викликати вашу активність з міні-браузером за таким же принципом. Запустіть в студії в окремому вікні будь-який старий проект або створіть новий і додайте в нього кнопку і пропишіть той же код, який ми використовували для клацання кнопки.
Ви можете уявити свій рядок у вигляді строкової константи і повідомити всім потенційним користувачам вашого браузера, як вони можуть запустити його у себе. Але в Android вже є така готова константа ACTION_VIEW. яка за довідкою документації являє собою наступне:
Перепишемо код для кнопки у другого додатка
Що станеться цього разу? Ми пам'ятаємо, що у нас прописано два дії, включаючи і android.intent.action.VIEW. А значить наше перше додаток з браузером теж має розпізнавати цю команду, коли якесь додаток у користувача використовує цей код. На емуляторі як мінімум є одна така програма "Browser", і тепер до неї додалася наша друга активність з першого додатка. На екрані з'явиться вибір з двох додатків.
А якщо видалити всі альтернативні браузери і залишити тільки вашу програму, то і вибору не буде. Ваш браузер стане основним. І якщо якийсь додаток захоче запустити веб-сторінку зазначеним способом, то відкриється ваша програма.
Невелике зауваження. Якщо замінити останню сходинку на таку:
То у вікні вибору програми замість верхнього рядка "Open with" або її локального перекладу з'явиться ваша рядок. Але не це головне. Якщо з якихось причин в ньому не виявиться жодного браузера, то даний варіант коду не викличе краху додатки, на відміну від початкового варіанту. Тому використовуйте запропонований варіант заради надійності.