Создание приложения андроид браузер. Пишем полноценный браузер под Aндроид

Давайте создадим новое приложение - браузер для android устройств, своими руками, это будет интересно, и кода будет не очень много.

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

Запустим android studio и создадим новый проект, application name My Site, company domain по своему усмотрению, я вписал домен сайта сайт. жмем Next, на следующей вкладке оставляем все без изменения, жмем next, далее уже выбрана Empty Activity , ее и оставим, затем в последней вкладке изменим Layout Name с activity_main на main, и нажмем финиш.

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").

public class MainActivity extends Activity { WebView wv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); wv = (WebView)findViewById(R.id.webView); WebSettings settings = wv.getSettings(); settings.setJavaScriptEnabled(true); wv..setWebViewClient(new WebViewClient()); }

Так же ниже напишем обработку нажатия кнопки назад на устройстве.

@Override public void onBackPressed(){ if(wv.canGoBack()){ wv.goBack(); }else{ super.onBackPressed(); } }

Запуск приложения в эмуляторе

Нажмем кнопку Start, это зеленый треугольник на панели инструментов AndroidStudio , запустится наш эмулятор, и если все сделано правильно, через некоторое время в браузере запустится поиск Яндекс, можно понажимать на виртуальную клавиатуру и что-то поискать, все работает хорошо.

Закроем программу, не закрывая сам эмулятор, нажав на красный прямоугольник, это Stop вместо Start, изменим адрес на произвольный, я «пропиарю» свой сайт "https://сайт",

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

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

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

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

package ru.maxfad.mysite; import android.app.Activity; import android.os.Bundle; import android.webkit.WebSettings; import android.webkit.WebView; import android.webkit.WebViewClient; public class MainActivity extends Activity { WebView wv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); wv = (WebView)findViewById(R.id.webView); WebSettings settings = wv.getSettings(); settings.setJavaScriptEnabled(true); wv..setWebViewClient(new WebViewClient()); } @Override public void onBackPressed(){ if(wv.canGoBack()){ wv.goBack(); }else{ super.onBackPressed(); } } }

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

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

Итак, кратко очертим объем и специфику последующей работы. Нам нужно создать элемент , в котором будет все происходить, написать код, создающий наш личный Веб-обозреватель, обустроить его базовыми функциями, прописать разрешение на использование Internet нашим приложением в файле манифеста, и написать обработчик нажатия аппаратной кнопки "Назад" на устройстве (то есть, что будет происходить в нашем браузере при нажатии на эту кнопку).

Начнем. Открываем файл activity_main.xml . Создаем там один единственный элемент , которого нам вполне достаточно для реализации веб-обозревателя:

< WebView xmlns: android= "http://schemas.android.com/apk/res/android" android: layout_height= "match_parent" android: layout_width= "match_parent" android: id= "@+id/web" />

Окно разметки будет выглядеть так:

После этого давайте сразу разберемся с файлом AndroidManifest.xml . Открываем его и добавляем туда две строчки, одна - это разрешение для приложения использовать Интернет, другая - изменение стиля приложения, а точнее сокрытие панели "Title" приложения (панели с заголовком приложения) с той целью, чтобы предоставить окну браузера больше пространства для отображения страниц.

Пишем строку разрешения использовать интернет до открытия тега ...:

< uses- permission android: name= "android.permission.INTERNET" / >

Теперь добавим к строке настройки нашего Activity команду для скрытия заголовка (нижняя строка, выделенная жирным, это также находиться в AndroidManifest.xml ):

< activity android: name= ".MainActivity" android: label= android: theme= "@android:style/Theme.NoTitleBar" >

Теперь переходим к самой важной и ответственной части работы - написанию java кода. Открываем файл MainActivity.java и пишем так следующее (объяснения даны в коде после знаков //, кто не заметил):

package home.myapplication ; import android.app.Activity ; import android.app.AlertDialog ; import android.content.ContentValues ; import android.content.Intent ; import android.database.Cursor ; import android.database.sqlite.SQLiteDatabase ; import android.database.sqlite.SQLiteOpenHelper ; import android.support.v7.app.ActionBarActivity ; import android.os.Bundle ; import android.util.Log ; import android.view.KeyEvent ; import android.view.Menu ; import android.view.MenuItem ; import android.view.View ; import android.webkit.WebView ; import android.webkit.WebViewClient ; import android.widget.Button ; import android.widget.EditText ; import android.widget.RadioButton ; import android.widget.TextView ; public class MainActivity extends Activity { // Объявляем переменную типа WebView private WebView mWeb; // Создаем класс типа Веб-обозреватель (WebViewClient), которому настраиваем // по умолчанию разрешение обрабатывать все ссылки внутри этого класса, // не обращаясь к сторонним программам: private class WebViewer extends WebViewClient { (WebView view , String url ) { view. loadUrl(url); return true ; } } public void onCreate (Bundle savedInstanceState ) { super. onCreate(savedInstanceState); setContentView(R . layout. activity_main); // Привязываем объявленную переменную типа WebView к созданному нами // элементу WebView в файле activity_main.xml: mWeb= (WebView )findViewById(R . id. web); // Подключаем для этого элемента поддержку Java скриптов: mWeb. getSettings(). setJavaScriptEnabled(true ); // Настраиваем страницу, которая будет загружать при запуске, можете ввести любую: mWeb. loadUrl("http://developeroleg.ucoz.ru/" ); // Настраиваем обозреватель для нашего элемента WebView, подключаем созданный нами выше // Веб-клиент, с помощью которого будет проходить просмотр страниц: mWeb. setWebViewClient(new WebViewer ()); } // Пишем код обработки нажатия кнопки назад на устройстве, что позволит нам при нажатии // на кнопку "Назад" перейти к предыдущей странице, а не просто закрывать приложения. // Оно будет закрываться кнопкой "Назад" лишь в том случае, если мы находимся на стартовой // странице, которую указали выше: @Override public void onBackPressed () { if (mWeb. canGoBack()) { mWeb. goBack();} else { super. onBackPressed(); } } }

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

При покупке смартфона на базе Андроид, по умолчанию обязательно будет установлен хотя бы один браузер. Это может быть Google Chrome или какой-либо другой веб-обозреватель, разработанный производителем. Но, если вам не подходит уже установленный браузер, вы можете скачать с Плей Маркет любой другой. Если на вашем устройстве несколько подобных приложений, возникает необходимость выбрать одно из них, которое будет использоваться по умолчанию. Далее в статье будут описываться варианты того, как это можно выполнить.

Браузер по умолчанию для Андроид

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

Способ 1: установка параметров ОС

Самый популярный и простой метод установки браузера по умолчанию — настройка ОС. Для того чтобы установить основной веб-обозреватель, выполните такие действия:

    1. Зайдите в настройки вашего смартфона с главного экрана или меню приложений.


    1. Откройте пункт «Приложения и уведомления» .

    1. Пролистайте список до конца, чтобы найти строку «Дополнительные настройки» . Иногда, в списке можно не увидеть данного раздела, так как он скрыт в графе «Еще» .

    1. Далее выберите вариант «Приложения по умолчанию» .

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

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


  1. Теперь вы можете пользоваться веб-обозревателем. Все ссылки, мессенджеры, в дальнейшем будут открываться в установленном браузере.

Данный метод действительно очень прост, к тому же вы сможете установить дополнительные настройки вашего смартфона.

Способ 2: настройка веб-обозревателей

С помощью настроек вы можете установить любой браузер по умолчанию, кроме стандартного Гугл Хром. Выполнить данную процедуру можно проделав несколько несложных шагов. Далее в статье, на примере мобильной версии Яндекс Браузер и MozillaFirefox, будет более подробно описаны все действия, которые необходимо выполнить для установки основного веб-обозревателя. Для других браузеров алгоритм действий будет аналогичный.

    1. Откройте мобильную версию браузера, в правом верхнем или нижнем углу нажмите на три вертикальных точки, чтобы открыть меню.


    1. Отыщите графу «Настройки» или «Параметры» и коснитесь ее, чтобы открыть.

    1. В предложенном списке найдите пункт «Сделать браузером по умолчанию» и кликните по нему. Если вы используете Яндекс Браузер, найти данный раздел можно найти на домашней странице в меню поисковой строки.

    1. Далее на экране появится вкладка, в которой необходимо нажать «Настройки» .

    1. Вы перейдете на страницу настроек «Приложение по умолчанию» . Теперь выполните те же действия, что описаны в 5, 6 и 7 пунктах предыдущего способа.


Данный вариант действий очень похож с описанным выше методом. После выполнения определенный действий, вы все равно перейдете в раздел «Приложения по умолчанию». Но отдав предпочтение данному способу, вы сможете установить настройки, не выходя из веб-обозревателя.

Способ 3: активная ссылка

Данный вариант действий имеет те же преимущества, что и первый описанный метод. Вы сможете установить любой браузер как основной на вашем смартфоне, в том случае, если в нем предусмотрена такая возможность.

Данный способ актуален только тогда, когда вы скачали новый браузер с Плей Маркета, или основной веб-обозреватель не был ранее установлен на ваш телефон.

  1. Зайдите в приложение, в котором есть активная ссылка, нажмите на нее для перехода. В случае, если всплывет окно с перечнем действий, выберите «Открыть» .
  2. Перед вами появится вкладка, в которой необходимо выбрать веб-обозреватель для того чтобы открыть ссылку. Это должен быть тот браузер, который вы ходите видеть основным на вашем смартфоне, после чего отметьте кнопку «Всегда» .
  3. Откроется выбранная ссылка в отмеченном браузере, который будет установлен по умолчанию.

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

Дополнительная установка веб-обозревателя для перехода по внутренним ссылкам

В определенных приложениях присутствует встроенная система чтения ссылок, которая называется WebView. Для этих программ как основной браузер используется GoogleChrome, или уже упомянутый выше средство WebView. Если возникает необходимость, можно сменить данный параметр.
Всем известные веб-обозреватели не обладают подобной функцией, поэтому придется поискать среди менее популярных браузеров. Можно остановиться на просмотрщиках разных производителей, уже установленных в фирменную оболочку ОС Андроид. Прежде чем вы приступите к выполнению описанных ниже действий, убедитесь в том, что на вашем смартфоне есть активное меню «Для разработчиков» .

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

    1. Зайдите в настройки и отыщите пункт «Система» , который находится внизу списка.

    1. Далее откройте раздел «Для разработчиков» . Еще вы можете отыскать его в главном меню настроек в конце перечня действий.

    1. Теперь найдите графу «Сервис WebView» и запустите его.

    1. Если вам предложат несколько вариантов сервисов для просмотра, выберите тот, который вам подходит больше всего, поставив флажок в области чекбокса.

  1. Теперь все ссылки будут открываться в браузере, который вы выбрали.

Просмотрщик ссылок, очень редко заменяется. Но вы можете воспользоваться данным вариантом, если на вашем смартфоне предусмотрена выше описанная возможность.

В данной статье были описаны все возможные методы установки браузера в качестве основного для смартфона на базе Андроид. В зависимости от ситуации, всегда можно подобрать подходящий для вас способ.

Изучать программирование под Андроид я начал не так давно. После того, как Eclips выдал мой первый Hello Word, сразу захотелось большего: возникло много планов и грандиозных идей. Одной такой идеей было написание своего Браузера. Думаю, у многих начинающих программистов возникало такое желание. Вот какие требования были мной поставлены и что получилось в итоге.

  • Программа должна открывать ссылки глобальной сети, свободно переходить по страничкам вперёд и назад;
  • Иметь возможность скачивать файлы и загружать обратно в сеть;
  • Создавать закладки и сохранять их;
  • Иметь возможность загружать ссылки, отправленные с других приложений;
  • Должна быть кнопка домашней страницы, меню с различными настройками и т.д.

В общем, полноценный браузер своими руками. Воплотим это в код.

Программа написана на основе стандартного webview, входящего в Android. В качестве стартовой страницы использую Яндекс, это дело вкуса. В качестве основного Activity будет MainActivity.

Первым делом задаём разметку xml файла -activity_main.xml. В качестве главного контейнера используем LinearLayout - в него заворачиваем ProgressBar для отображения процесса загрузки. Далее создаём ещё один контейнер LinearLayout - в него заворачиваем наш Webview и FrameLayout (его используем для растягивания воспроизводимого видео на весь экран).

Посмотреть код

LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".MainActivity">

Начнём писать код в MainActivity

Полный код MainActivity.

Посмотреть полный код

Import java.io.File; import android.R.menu; import android.annotation.SuppressLint; import android.app.ActionBar; import android.app.Activity; import android.app.AlertDialog; import android.app.DownloadManager; import android.app.DownloadManager.Request; import android.app.KeyguardManager; import android.app.SearchManager; import android.content.BroadcastReceiver; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.IntentFilter; import android.content.SharedPreferences; import android.net.Uri; import android.os.Bundle; import android.os.Environment; import android.os.Parcelable; import android.os.PowerManager; import android.preference.PreferenceManager; import android.provider.MediaStore; import android.util.Log; import android.view.KeyEvent; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.WindowManager; import android.webkit.ConsoleMessage; import android.webkit.DownloadListener; import android.webkit.ValueCallback; import android.webkit.WebBackForwardList; import android.webkit.WebChromeClient; import android.webkit.WebView; import android.webkit.WebViewClient; import android.widget.FrameLayout; import android.widget.SearchView; import android.widget.Toast; import android.graphics.Bitmap; import android.webkit.URLUtil; public class MainActivity extends Activity { //Логическая переменная для статуса соединения Boolean isInternetPresent = false; ConnectionDetector cd; private WebChromeClient.CustomViewCallback mFullscreenViewCallback; private FrameLayout mFullScreenContainer; private View mFullScreenView; private WebView mWebView; String urload; int cache = 1; SharedPreferences sPref; final Activity activity = this; public Uri imageUri; private static final int FILECHOOSER_RESULTCODE = 2888; private ValueCallback mUploadMessage; private Uri mCapturedImageURI = null; private DownloadManager downloadManager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //Создаем пример класса connection detector: cd = new ConnectionDetector(getApplicationContext()); // создаём кнопу home final ActionBar actionBar = getActionBar(); actionBar.setHomeButtonEnabled(true); actionBar.setDisplayHomeAsUpEnabled(true); // ловим intent что файл загружен и оповещаем BroadcastReceiver receiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if (DownloadManager.ACTION_DOWNLOAD_COMPLETE.equals(action)) { loadEnd(); } } }; // ловим intent что файл загружен registerReceiver(receiver, new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE)); mWebView = (WebView) findViewById(R.id.web_view); mFullScreenContainer = (FrameLayout) findViewById(R.id.fullscreen_container); mWebView.setWebChromeClient(mWebChromeClient); mWebView.loadUrl("http://yandex.ru"); handleIntent(getIntent()); class HelloWebViewClient extends WebViewClient { @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { super.onPageStarted(view, url, favicon); findViewById(R.id.progress1).setVisibility(View.VISIBLE); setTitle(url); urload=mWebView.getUrl(); ConnectingToInternet (); } @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); // запускаем ссылки на маркет Uri uri = Uri.parse(url); if (uri.getScheme().equals("market")) { Intent i = new Intent(android.content.Intent.ACTION_VIEW); i.setData(uri); i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(i); mWebView.canGoBack(); { mWebView.goBack(); } } // запускаем email if (uri.getScheme().equals("mailto")) { Intent i = new Intent(android.content.Intent.ACTION_SEND); i.setType("text/html"); i.putExtra(Intent.EXTRA_SUBJECT, "Введите тему"); i.putExtra(Intent.EXTRA_TEXT, "Введите текст"); i.putExtra(Intent.EXTRA_EMAIL, new String{url}); startActivity(i); mWebView.canGoBack(); { mWebView.goBack(); } } // запускаем звонилку if (uri.getScheme().equals("tel")) { Intent i = new Intent(android.content.Intent.ACTION_DIAL); i.setData(uri); startActivity(i); mWebView.canGoBack(); { mWebView.goBack(); } } // запускаем лoкцию if (uri.getScheme().equals("geo")) { Intent i = new Intent(android.content.Intent.ACTION_VIEW); i.setData(uri); startActivity(i); mWebView.canGoBack(); { mWebView.goBack(); } } return true; } @Override public void onPageFinished(WebView view, String url) { findViewById(R.id.progress1).setVisibility(View.GONE); } @Override public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { ConnectingToInternet (); mWebView.loadUrl("file:///android_asset/error.png"); } } mWebView.setWebViewClient(new HelloWebViewClient()); // загрузка файлов на устройство mWebView.setDownloadListener(new DownloadListener() { @Override public void onDownloadStart(final String url, String userAgent, String contentDisposition, String mimetype, long contentLength) { final String fileName = URLUtil.guessFileName(url, contentDisposition, mimetype); final AlertDialog.Builder downloadDialog = new AlertDialog.Builder(MainActivity.this); downloadDialog.setTitle("Менеджер загрузок"); downloadDialog.setMessage("Загрузить этот файл в папку Donwload ?" + "n" + mimetype + "n" + url); downloadDialog.setPositiveButton("Да", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialogInterface, int i) { doDownload(url, fileName); dialogInterface.dismiss(); } }); downloadDialog.setNegativeButton("Нет", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialogInterface, int i) { } }); downloadDialog.show(); } }); } // **************************************** //***************************************** //***************************************** public void ConnectingToInternet (){ //Получаем статус Интернет соединения isInternetPresent = cd.ConnectingToInternet(); //Проверяем Интернет статус: if (isInternetPresent) { //Интернет соединение есть //делаем HTTP запросы: } else { //Интернет соединения нет Toast.makeText(this, " Интернет отвалился!!!", Toast.LENGTH_SHORT).show(); } } @SuppressLint("SetJavaScriptEnabled") @Override // настройки public void onResume(){ super.onResume(); SharedPreferences sPref = PreferenceManager.getDefaultSharedPreferences(this); if (sPref.getBoolean("img", false)) { mWebView.getSettings().setLoadsImagesAutomatically(false); } else { mWebView.getSettings().setLoadsImagesAutomatically(true); } if (sPref.getBoolean("js", false)) { mWebView.getSettings().setJavaScriptEnabled(false); } else { mWebView.getSettings().setJavaScriptEnabled(true); } if (sPref.getBoolean("cache", false)) { cache = 2; } else { cache = 1; } } // пишем закладку public void saveBm(String urlPage1, String urlTitle1) { Intent intent = new Intent(this, SaveBmActivity.class); intent.putExtra("urlTitle", urlTitle1); intent.putExtra("urlPage", urlPage1); startActivity(intent); } public void pref() { // настройки Intent intent = new Intent(this, PreferencesActivity.class); startActivity(intent); } // чистим кэш и историю private void clCache(){ clearCache(activity); mWebView.clearCache(true); mWebView.clearHistory(); Toast.makeText(this, "Кеш и История очищены", Toast.LENGTH_SHORT).show(); } @Override protected void onUserLeaveHint() { super.onUserLeaveHint(); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) {// кнопка назад if ((keyCode == KeyEvent.KEYCODE_BACK)) { mWebView.canGoBack(); { mWebView.goBack(); } return true; } return super.onKeyDown(keyCode, event); } // ловим url запустившей программы private boolean handleIntent(Intent intent) { String action = intent.getAction(); if (Intent.ACTION_VIEW.equals(action)) { String url = intent.getDataString(); Toast.makeText(this, url, Toast.LENGTH_SHORT).show(); mWebView.loadUrl(url);// грузим страницу return true; } return false; } // менеджер загрузки private void doDownload(String url,String fileName) { Uri uriOriginal = Uri.parse(url); try { Toast.makeText(MainActivity.this, "Downloading " + fileName, Toast.LENGTH_LONG).show(); Request request = new DownloadManager.Request(Uri.parse(url)); request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, fileName); final DownloadManager dm = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE); dm.enqueue(request); } catch (Exception e) { Toast.makeText(this, "Ошибка", Toast.LENGTH_SHORT).show(); Log.e("", "Problem downloading: " + uriOriginal, e); } } // тянем видео на весь экран private final WebChromeClient mWebChromeClient = new WebChromeClient() { @Override @SuppressWarnings("deprecation") public void onShowCustomView(View view, int requestedOrientation, CustomViewCallback callback) { onShowCustomView(view, callback); } @Override public void onShowCustomView(View view, CustomViewCallback callback) { if (mFullScreenView != null) { callback.onCustomViewHidden(); return; } mFullScreenView = view; mWebView.setVisibility(View.GONE); mFullScreenContainer.setVisibility(View.VISIBLE); mFullScreenContainer.addView(view); mFullscreenViewCallback = callback; } @Override public void onHideCustomView() { super.onHideCustomView(); if (mFullScreenView == null) { return; } mWebView.setVisibility(View.VISIBLE); mFullScreenView.setVisibility(View.GONE); mFullScreenContainer.setVisibility(View.GONE); mFullScreenContainer.removeView(mFullScreenView); mFullscreenViewCallback.onCustomViewHidden(); mFullScreenView = null; } // ********************************************* грузим файлы в сеть // openFileChooser for Android 3.0+ public void openFileChooser(ValueCallback uploadMsg, String acceptType) { // Сообщение об обновлении mUploadMessage = uploadMsg; try { // Создать AndroidExampleFolder в sdcard File imageStorageDir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES) , "AndroidExampleFolder"); if (!imageStorageDir.exists()) { // Создать AndroidExampleFolder в sdcard imageStorageDir.mkdirs(); } // Создать камеру захваченное изображение путь к файлу и имя File file = new File(imageStorageDir + File.separator + "IMG_" + String.valueOf(System.currentTimeMillis()) + ".jpg"); mCapturedImageURI = Uri.fromFile(file); // Камера захвата изображения intent final Intent captureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); captureIntent.putExtra(MediaStore.EXTRA_OUTPUT, mCapturedImageURI); Intent i = new Intent(Intent.ACTION_GET_CONTENT); i.addCategory(Intent.CATEGORY_OPENABLE); i.setType("image/*"); // Создать файл селектора intent Intent chooserIntent = Intent.createChooser(i, "Image Chooser"); // Установить камеры намерении выбора файлов chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS , new Parcelable{captureIntent}); // На выбор изображения обхода метода onactivityresult вызов метода активности startActivityForResult(chooserIntent, FILECHOOSER_RESULTCODE); } catch (Exception e) { Toast.makeText(getBaseContext(), "Exception:" + e, Toast.LENGTH_LONG).show(); } } // openFileChooser for Android < 3.0 @SuppressWarnings("unused") public void openFileChooser(ValueCallback uploadMsg) { openFileChooser(uploadMsg, ""); } // @SuppressWarnings("unused") public void openFileChooser(ValueCallback uploadMsg, String acceptType, String capture) { openFileChooser(uploadMsg, acceptType); } public boolean onConsoleMessage(ConsoleMessage cm) { onConsoleMessage(cm.message(), cm.lineNumber(), cm.sourceId()); return true; } public void onConsoleMessage(String message, int lineNumber, String sourceID) { //Log.d("androidruntime", "Show console messages, Used for debugging: " + message); }; };// End setWebChromeClient // Получаем результат @SuppressWarnings("unused") private Object data; @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (data == null) { return; } String urlPage2 = data.getStringExtra("urlPage2"); mWebView.loadUrl(urlPage2); if (requestCode == FILECHOOSER_RESULTCODE) { if (null == this.mUploadMessage) { return; } Uri result = null; try { if (resultCode != RESULT_OK) { result = null; } else { // извлечь из собственной переменной, если намерение состоит в нуль result = data == null ? mCapturedImageURI: data.getData(); } } catch (Exception e) { Toast.makeText(getApplicationContext(), "activity:" + e, Toast.LENGTH_LONG).show(); } mUploadMessage.onReceiveValue(result); mUploadMessage = null; } } //***************************** public void loadEnd () { Toast.makeText(this, "Файл Загружен в папку Donwload", Toast.LENGTH_SHORT).show(); } // меню @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } // ******************************************************* @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home:// кнопка home mWebView.loadUrl("http://yandex.ru"); return true; case R.id.item1:// назад mWebView.canGoBack(); { mWebView.goBack(); } return true; case R.id.item2: // вперёд mWebView.canGoForward(); { mWebView.goForward(); } return true; case R.id.item3: // перезагрузка mWebView.reload(); { mWebView.reload(); } return true; case R.id.item4:// чистим кеш mWebView.clearCache(true); clearCache(activity); Toast.makeText(this, "Кэш чист.", Toast.LENGTH_SHORT).show(); return true; case R.id.item5: mWebView.clearHistory();// чистим историю Toast.makeText(this, "История чиста.", Toast.LENGTH_SHORT).show(); return true; case R.id.item6: saveBm(mWebView.getUrl(), mWebView.getTitle());// пишим закладку return true; case R.id.item7:// панель закладок Intent intent1 = new Intent(this, SaveBmActivity.class); startActivityForResult(intent1, 1); return true; case R.id.item8: // стоп загрузка mWebView.stopLoading(); return true; case R.id.item9: pref();// настройки return true; case R.id.item10: // пока пусто return true; case R.id.item11:// выход if (cache == 2) { clCache(); } finish(); return true; default: return super.onOptionsItemSelected(item); } } @SuppressWarnings("deprecation") @Override public void onDestroy() { super.onDestroy(); mWebView.stopLoading(); mWebView.clearCache(true); mWebView.clearView(); mWebView.freeMemory(); mWebView.destroy(); mWebView = null; } // чистим кеш void clearCache(Context context) { clearCacheFolder(context.getCacheDir()); } void clearCacheFolder(final File dir) { if (dir!= null && dir.isDirectory()) { try { for (File child:dir.listFiles()) { //рекурсивно чистим сначала каталоги if (child.isDirectory()) clearCacheFolder(child); else //потом собственно файлы child.delete(); } } catch(Exception e) { } } } }

Проект можно скачать