Cómo hacer de su navegador de aplicaciones Android. Los mejores navegadores para Android. Instalación adicional de un navegador web para la transición a los enlaces internos

Querido, soy un estudiante BCA. Tengo que hacer un proyecto para el último semestre. Por lo tanto, decidí crear una web que funcione en el sistema operativo Android, pero estoy completamente para esta aplicación. Entonces, ¿alguien puede ayudarme en esto? Ya he instalado todas las herramientas necesarias, como JDK, Android SDK 3.0, Eclipse. Pero ahora no tengo idea de dónde debo comenzar a desarrollar un navegador. Por lo tanto, por favor ayúdame ... Solo tengo 2 meses para este proyecto. Entonces, ¿es posible después de 2 meses o no?

Depende de lo que quiere decir al desarrollar un navegador ...

El desarrollo de un mecanismo de navegador + Representación desde cero es una gran cantidad de trabajo, pero puede crear fácilmente un navegador de Androids WebView con WebViewClient y crear una nueva interfaz de usuario cambiando el método de interacción del usuario con el navegador.

WebView tiene todo tipo de interceptores para interceptar interactuar con el navegador, por lo que puede expandirlo fácilmente. Por ejemplo, puede permitir que el usuario desbordará las páginas (por ejemplo, Google Fastflip), experimentando con 3D, haciendo una página web mostrada en el espacio OpenGL (por ejemplo, en el navegador de la esfera), etc.

Como punto de partida, eche un vistazo al blog Alexander Kamek y su proyecto de Mosambro, que expande el navegador Android agregando un soporte Micumatat.

Suena como un proyecto realmente grande, y por lo tanto no puede comenzar desde cero y escríbelo. Debe compilar un plan sobre cómo desea implementar todas las piezas, grabar gráficos de clases, etc. Si está estudiando informática, debe haber escuchado al respecto en semestres anteriores.

Primero tienes que preguntarte si este proyecto es posible. ¡Como puede ver en comentarios, la mayoría de las personas están de acuerdo en que no debe subestimar esta tarea!

Realmente sugiero que entienda la escala de esta tarea, aquí está el código fuente del navegador de Androids, que le da una idea de su complejidad.

Crear un navegador básico podría hacerse cada dos o dos días para aquellos que tienen la experiencia de desarrollar Android, así como otros afirman que WebView proporciona casi todo lo que necesita para mostrar una página web. Hay varias configuraciones para JavaScript y otras funciones para verificar, y luego, después de marcar el cuadro de texto principal para la URL y la URL de IR, que es en gran parte el navegador web principal.

El trabajo real viene en todas las configuraciones extendidas. Crear un navegador que compite con muchachos grandes, tal vez un poco difícil para una persona en un par de meses, pero para hacer algo que funcione, muy posible. ¡Intentar!

Para crear un navegador web completo en Android utilice WebView.

Código de encuadernación simple:

WEBVIEW WV \u003d (WebView) FindViewByID (R.ID.WebView1); WV \u003d (WebView) FindViewByID (R.ID.WebView1); Wv.loodurl ("http://www.apsmind.com");

La programación de estudio para Android comencé no hace mucho tiempo. Después de que los Eclips traicionaron mi primera palabra Hello, inmediatamente quería más: muchos planes y grandes ideas surgieron. Una de esas ideas era deletrear tu navegador. Creo que muchos programadores principiantes han tenido tal deseo. Estos son los requisitos de mí fueron entregados y lo que sucedió al final.

  • El programa debe abrir los enlaces de la red global, para moverse libremente en las páginas y hacia atrás;
  • Poder descargar archivos y descargar de nuevo a la red;
  • Crea marcadores y guardárselos;
  • Ser capaz de descargar los enlaces enviados desde otras aplicaciones;
  • Debe haber un botón de página de inicio, un menú con varias configuraciones, etc.

En general, un navegador de pleno derecho con tus propias manos. Voy a encarnar en el código.

El programa está escrito sobre la base del WebView estándar incluido en Android. Uso Yandex como la página de inicio, esta es una cuestión de gusto. Como la actividad principal será la principal sostenibilidad.

Primero, especifico el marcado del archivo XML -activity_main.xml. Como contenedor principal, usamos lineartAYOUT, enviamos en la barra de progreso de TI para mostrar el proceso de arranque. A continuación, cree otro contenedor de LineArlayout: envuelve a nuestro webview y Framelayout (se utiliza para estirar el video jugable en toda la pantalla).

Código de vista

Linearlayout xmlns: android \u003d "http://schemas.android.com/apk/res/android" XMLNS: Herramientas \u003d "http://schemas.android.com/tools" Android: Layout_width \u003d "Match_Parent" Android: Layout_height \u003d "Match_Parent" Android: Orientation \u003d "Vertical" Herramientas: contexto \u003d ". MAINATIVIDAD"\u003e

Vamos a escribir código en la principal autorización.

Código de mayor mantenimiento.

Ver código completo

Importar java.io.file; Importar Android.R.Menu; Importar android.annotation.supresslint; Importar android.app.actionBar; Importar android.app.activeivity; Importar android.app.alertdialog; Importar android.app.downloadManager; Importar android.app.downloadManager.Request; Importar android.app.keyguardManager; Importar android.app.searchmanager; Importar Android.Content.BroadCastReceiver; Importar Android.Content.Context; Importar Android.Content.DialogInterface; Importar Android.Content.Intent; Importar Android.Content.IntentFilter; Importar android.content.sharedpraferences; Importar android.net.uri; Importar android.os.bundle; Importar Android.os.Evironment; Importar Android.os.Parcelleable; Importar Android.os.powerManager; Importar Android.Preference.PreferenceArager; Importar android.provider.mediastore; Importar android.util.log; Importar android.view.keyEvent; Importar android.view.menu; Importar android.view.menuitem; Importar android.view.view; Importar android.view.WindowManager; Importar android.webkit.consoleMessage; Importar android.webkit.downloadListener; Importar Android.Webkit.ValueCallback; Importar android.webkit.webbackforwardlist; Importar Android.Webkit.WebChRomEclient; Importar android.webkit.webview; Importar Android.Webkit.WebViewClient; Importar android.widget.Framelayout; Importar Android.widget.searchview; Importar android.widget.toast; Importar android.graphics.bitmap; Importar android.webkit.urlutil; MAINACTENCIA DE LA CLASE PÚBLICA ANTENDIENDA LA ACTIVIDAD (// Estado booleano para el compuesto Boolean ISINTERNETPRESENTE \u003d FALSE; CONEXIONETECTOR CD; WebChRomeclient.CustomViewCambiaBalite MullScreenviewCallback; Framelayout MullScreencontrainer; Vista privada MULLSCREENVIEVIE; WebView privado Mwebview; String URload; Intref; Final Actividad de actividad \u003d esto; URI PÚBLICO SATIONURI; FINAL ESTÁTICO PRIVADO INT FILECHOOSER_RESULTCODE \u003d 2888; PRIVADO DE VALUECALLBACK MuploadMessage; URI PRIVADO MCAPTURTIGEIRI \u003d NULL; Descarga privada; @Override protected void OnCreate (savedInstanceState); setContentView (R.Layout.Activity_Main); // Crear un ejemplo de la clase de conexión del detector: CD \u003d Nueva ConnectionDeter (getApplicationContext ()); // Crear un hogar definitivo Barra de acciones actionbar \u003d getActionBar ( ); actionBar.setHomeButtonEnabled (true); actionBar.setDisplayHomeAsUpEnabled (true); // atrapar la intención de que el archivo se carga y se notifica BroadcastReceiver receptor \u003d new BroadcastReceiver) ((contexto contexto (@Override public void OnReceive, la intención intención) (String Acción \u003d intent.get.getaction (); si (descargagermanager.action_download_complete.equals (acción)) (Cargada ();))); // Intención de pesca que el archivo está cargado RegisterEiver (Receptor, New IntentFilter (DownloadManager.Action_Download_Complete)); MWEBVIEW \u003d (R.ID.Web_View); MfullScreenContainer \u003d (FrameLayout) findViewById (R.ID.FullScreen_Container); MWebView.setWebchromeClient (MWebChromeclient); MWebView. Loadurl ("http://yandex.ru"); HandleIntent (getIntent ()); Clase HellowebViewClient extiende a WebViewClient (@Override Public Void OnPagestarted (Webview View, URL de cadena, FAVICON de mapa de bits) (super.onpagestarted (Ver, URL, FAVICON); FindViewByID (R.Id.Progress1) .Setvisibilidad (vista. Visible); Settitle ( url); urload \u003d mwebview.geturl (); ConnectingTointernet ();) @ Override shoulderrideurLoading pública booleano (view.Loadurl (URL); // Ejecutar Enlaces a la URI URI \u003d URI.PARSE (URL), si (uri.getscheme . () es igual ( "mercado") (Android.Content.intent.action_View); i.SetData (URI); i.Addflags (intent.flag_activity_new_task); startActivity (i); mwebview.cangoback (); (mwebview.goback ();)) // Ejecutar correo electrónico si (uri.getscheme () es igual ( "mailto")) (intención I \u003d Nueva Intentent (Android.Content.intent .Action_send);. i.setType ( "text / html") ; i.Putextra (Intent.Extra_Subject, "Enter tema"); i.Putextra (Intent.Extra_Text, "Introduzca el texto"); i.Putextra (Intent.Extra_Email, nueva cadena (URL)); startAct ivity (i); mwebview.cangoback (); (Mwebview.goback ();))) // Ejecute la llamada if (uri.getscheme (). Es igual a ("tel") (intento i \u003d nueva intención (android.content.intent.action_dial); i.setdata (URI) ; Startatoryivity (i); mwebView.cangoback (); (mwebview.goback ();)) // Ejecutar loping if (uri.getscheme (). es igual a ("geo") (intento i \u003d nueva intención (Android.content . INTENT.Action_View); I.SETDATA (URI); Startatoryivity (i); mwebview.cangoback (); (MWebView.goback ();)) return true; @Override public void onpagefinished (findViewById (R.ID.progress1) .Setvisibility (View.Gone);) @ Override Pública OnreceiveDerror Vacío (Ver Webview, Int Errorcode, cadena de descripción de cuerdas Failingurl) (ConnectingTointernet (); mwebview.loadurl ( "file: ///android_asset/error.png");)) MWebView.setWebViewClient (Nueva HelloweBViewClient ()); // Cargue los archivos en el dispositivo mwebview.setdownloadListener (nuevo descarklistener () (@Override Public Void OnDownloadStart (URL de cadena final, String UserAgent, String ContentDisposición, String Mimetype, Long Longitud) (Final String FileName \u003d URLUTIL.GUESSFILENAME (URL, contentDisposition, mimeType); alertdialog.builder downloaddialog final \u003d nueva alertdialog.builder (MainActivity.This); downloaddialog.settitle ( "gestor de descargas"); downloaddialog.setmessage ( "descargar el archivo en la carpeta Donwload?" + "n" + mimeType + "n "+ URL); downloaddialog.setpositiveton (" sí", nuevo dialoginterface.onclicklistener () (dialogiNTERFACE, Int i) (DodownLoad (URL, nombre del archivo); dialoginterface.dismiss ())); downloaddialog .setnegativeButton (" No ", nuevo DialogInterface.onClickListener () (Vacío público OnClick () () ())); downloaddialog.show ();)); ) // ****************************************** // ***** ************************************ // ************** ***************************** Conexión pública ConectingTointerNet () (// Recibir el estado de la conexión a Internet isInternetpresent \u003d cd.connectingtointernet ( ); / / comprobamos el estado de Internet: si (isinternetpresent) (// conexión a Internet está comiendo // Hacer peticiones HTTP :) demás (conexiones de Internet // No toast.maketext (esto, "Internet se cayó !!!", toast.length_short) .show ();)) @SuppressLint ( "setJavascriptenable") // @ Override onResume public void () configuración (super.onresume (); SharedPreferences SPREF \u003d PreferenceEmanager.getDefaultSharedPreferences (este), si (spref.getboolean ( "img", false)) (MWebview.getSettings () SetloadsImagesAutomatically (false);.) ELSE (MWebview.getSettings () SetloadsImagesAutomatically (true);.) si (spref.getboolean ( "js", false)) (mwebview .gettings () false SetJavascriptenable);.) ELSE (MWebView.getSettings () SetJavascriptenabled (TRUE).; ) si (sprf.getbeoolean ("caché", falso)) (caché \u003d 2;) otra cosa (caché \u003d 1;)))) // Escriba un marcador Public Void SaveBM (String Urlpage1, String Urltitle1) (Intención intent \u003d nueva intención ( esto, Savebmactivity.class); Intent.Putextra ( "UrLTITLE", URLTITLE1); INTENT.PUTEXTRA ( "urlPage", URLPAGE1); startActivity (intención);) Vacío Pref Pública () // (Intención Intención Ajustes Intens \u003d Nuevos ( esto, PreferenceSActivity.class); startActivity (Intención);) // Limpiar el caché y la historia de la soldado clcache vacío () (clearcache (Actividad); MWebView.clearCache (TRUE); MWebView.ClearHistory (); toast.maketext ( esto "caché y la historia se borra", tostadas. Longitud_short) .show (); ) @Override protegió el vacío OnUnserleAvehint () (super.onuserleAvehint ();) @Override Public Boolean Onkeydown (INT Keycode, Evento KeyEvent) (// Botón Atrás if ((Keycode \u003d\u003d KeyEvent.Keycode_canGoback () (Mwebview.goback ();) devuelve verdadero;) devuelva a super.onkeydown (código clave, evento);) // pescar la URL del Programa de Manillarintent Booolean privado (acción de la cadena \u003d intent.get.getaction (); ifent .action_view.equals (Acción)) (url de cadena \u003d intent.getdatalcing (); toast.maketext (esto, url, toast.length_short) .show (); mwebview.loaurl (URL); // Georgia devuelve la página verdadera;) devuelva false;) // Void privado DODOWNAD DE DODOWNAD GAIR DE DESCARRAR (URIRIIGINAL \u003d URI.PARSE (URL); intente (Toast.maketext (Mainactivity. Esta, "Descarga" + nombre de archivo, toast.length_long). Mostrar (); Solicitud de solicitud \u003d nuevo descargaManager.Request ( URI.PARSE (URL); SOLICITUD DE SOLICITUD DESDESTINIONEXERALPUBLICDIR (Medio ambiente.Directory_Downloads, Filena me); DownloadManager DM \u003d (descargaganager) getsystemsystemvice (contexto.download_service); Dm.enqueue (solicitud); ) Captura (toast.maketext (esto, "error", toast.length_short) .show .show (); log.e ("", "descarga de problemas:" + urioriginal, e);)) // Tyant video pantalla completa Final privada Webchromeclient mwebchromeclient \u003d nuevo webChRomEclient () (@Override @SuppressWarnings ("deprecation") Void Public OnShowCustomView (Ver Vista, INT solicitudestation, CustomViewCallback CallBack) (OnShowCustomView (Ver, devolución de llamada);) @Override Public Void OnShowCustomView (Ver Vista, CustomViewCallback Callback ) (! SI (MULLLSCREENVIEW \u003d NULL) (devolución de llamada.onCustomViewHidden (); devolución;) MullScreenView \u003d Vista; MwebView.SETVISIBILIDAD (View.gone); MullScreencontainer.Setvisibilidad (Ver. Visible); MullScreencontainer.addview (Ver); MullScreenviewCallback \u003d devolución de llamada;) @Override Public Void OnhideCustomView () (super.onhidecustomView (); if (Mullscreenview \u003d\u003d null) (return;) mwebview.setvisibility (view.visible); MullScreenView.SETVISIBILIBLE (View.gone); MullScreencontainer.set. Visibilidad (ver.gone); mulscreencontontainer.removeView (MullScreenview); mullscreenviewcallback.oncustomviewhidden (); mulscreenview \u003d nulo; ) // ********************************************* Enviamos Archivos Network // OpenFilechooser para Android 3.0+ Public Void OpenFilechooser (ValueCallback uploadmsg, string acepttype) (// Mensaje sobre la actualización de muploadmessage \u003d uploadmsg; intentar (// crear androidexamplefolder en el archivo sdcard imagestoragedir \u003d nuevo archivo (entorno.getExternalstoragepublicdirectory (entorno.directory_pictures), "androidexamplefolder"); if (imagestoragedir.exists ( )) (// Crear androidexamplefolder en sdcard imagestoragedir.mkdirs ();) // Crear la cámara capturada la ruta de la imagen al archivo y el archivo de archivo \u003d nuevo archivo (img_ "+ string.valueof (sistema.currenttimemillis () + \u003d \u003d Nueva intención); i.AdCategory (intent.category_openable); I.SETTYPE ("Imagen / *"); // Crear un selector de intenciones de intención selectora selective.createcooser (i ", choos de imagen Er "); // instalar cámaras con la intención de seleccionar los archivos chooserintent.putextra (intent.extra_initial_inents, nueva parcelable (CaptureIntent)); // Sobre la elección de la imagen que anula el método de OnactivityResult, llamando al método de actividad de StartactivityForResult (ChooserIntent, Filechooser_ResultCode); ) Captura (getBaseContext (), "Exception:" + e, toast.length_long) .show ();)) // OpenFilechooser para Android< 3.0 @SuppressWarnings("unused") public void openFileChooser(ValueCallback Uploadmsg) (OpenFilechooser (Uploadmsg, ");) // @suppresswarnings (" no utilizado ") Void Public OpenFilechooser (ValueCallback Uploadmsg, string acepttype, captura de cadena) (OpenFilechooser (Uploadmsg, AcceptType);) Public Boolean Onconsolemessage (Onconsolemessage (cm.Message (), cm.lineNumber (), cm.SourceID ()); devuelve verdadero;) Vacío público OnConsolemessage ( Mensaje de cadena, INT LINEnumber, Source SourceID) (//log.d ("AndroidRuntime", "Mostrar mensajes de consola, utilizados para la depuración:" + Mensaje);); ); // Finalizar setwebchromeclient // Obtenga el resultado @SuppressWarnings ("no utilizado") Datos de objetos privados; @Override protegió el vacío OnactivityResult (TI Solicitud, el código de resultados, los datos de intenciones) (IF (DATOS \u003d\u003d NULL) (Retorno;) String Urlpage2 \u003d Data.GetStringExtra ("URLPAGE2"); mwebView.loaurl (URLPAGE2); IF (Solicite Código \u003d \u003d Filechooser_resultcode) (if (null \u003d\u003d esto.muploadmessage) (return;) Resultado de URI \u003d NULL; intente (si (Resultado \u003d resultado_OK) (resultado \u003d nulo;) otra cosa (// extraer de su propia variable si la intención consiste en Cero resultado \u003d datos \u003d\u003d nulo? Mcapturedimaguri: data.getdata ();)) captura (getApplicationContext (), "Actividad:" + e, toast.length_long) .show ();) muploadMessage .onReceiveValue (resultado); muploadmessage \u003d Null;)) // ******************************* PUBLICO CALIDAD DE VOIDAD () (Toast .maketext (este "archivo es cargado en la carpeta de descarga ", toast.length_short) .show ();) // @override Public Boolean OnceateeOptionsMenu (menú Menú) (// inflar el menú; Esto agrega elementos a la barra de acción si está presente. Getmenuin Flater (). Inflar (R.Menu.Main, Menú); Devuelve verdadero; ) // ************************************************* ******** @Override Public Boolean OnotetemsItemsSelected (item.getitemid ()) (Caso Android.R.ID.Home: // Botón Inicio MwebView.loaurll ("http: // yandex .ru"); volver cierto; caso r.id.item1: // back mwebview.cangback (); (mwebview.goback ();) devuelve verdadero; caso r.id.item2: // reenviar mwebview.cangoforward () (mwebview.goforward ( );) Devuelve verdadero; caso r.id.item3: // reiniciar mwebview.reload (); (mwebview.reload ();) devuelve verdadero; caso r.id.item4: // Clee Cache MwebVer.ClearCache (VERDADERO) ; ClearCache (actividad); toast.maketext (esto ", está limpio", toast.length_short) .show (); devuelve verdadero; caso r.id.item5: mwebview.clearhistory () / / limpie la historia de toast.maketext (esta "," Historia de Chiste "., Toast.length_short) .show (); devuelve verdadero; caso r.id.item6: guardaz (mwebview.geturl (), mwebview.gettitle ()); / / Bookmark Devuelve verdadero; Caso R.ID.ITEM7: // Panel Favoritos Intención intent1 \u003d Nueva intención , Savermactivity.class); Startatoryiforresult (Intent1, 1); Devuelve verdadero; CASO R.ID.ITEM8: // Deja de cargar MwebView.Stoploading (); Devuelve verdadero; Caso R.ID.ITEM9: Pref (); // Configuración Devuelve VERDADERO; Caso r.id.item10: // todavía vacío devuelve verdadero; Caso R.ID.ITEM11: // if (cache \u003d\u003d 2) (caché \u003d\u003d 2) (CLCACHE ();) Finalizar (); Devuelve verdadero; Predeterminado: Devuelve Super.optesItemsSelected (Artículo); )) @Suppresswarnings ("deprecation") @Override Public Void Onestroy () (super.ondosdestroy (); mwebview.stoploading (); mwebview.clearcache (verdadero); mwebview.clearview (); mwebview.freemeMory (); mwebview. Destruir (); mwebview \u003d null;) // chash void cleeCachefolder (contexto.getcachedir ();) Void ClearCachefolder (Dirección de archivo) (¡SI (DIR! \u003d NULL && DIR.ISDIRTORY ()) (intente (para (ARCHIVO NIÑO: DIR.LISTFILES ()) (// limpiarlo recursivamente primero si los directorios if (Child.isDirectory ()) ClearCachefolder (niño); en realidad, en realidad Archivos infantiles .delete ();)) captura (excepción e) ()))))

El proyecto puede descargar.

Android le permite crear su propia ventana para ver las páginas web o incluso crear su clon de navegador usando un elemento. El propio elemento utiliza el motor webkit y tiene muchas propiedades y métodos. Nos limitamos a un ejemplo básico de crear una solicitud, con la que podemos ver las páginas en Internet. En las últimas versiones, se utiliza el motor de cromo, pero no hay una gran diferencia en esto para tareas simples.

Crear un nuevo proyecto Mybrowser. e inmediatamente reemplaza el código en el archivo de marcado res / diseño / actividad_main.xml:

Ahora abre el archivo de actividad. Mainactividad.Java. Y declararemos el componente, así como inicializarlo, para incluir el soporte para JavaScript y especificar la página para descargar.

Webview privado webview; Public Void Oncreate (Bundle SavedInstanceStancate) (Super.Onscreate (SavedInstancestate); SetContentView (R.Layout.Activity_Main); WebView \u003d FindViewByID (R.ID.WebView); // Permite el soporte JavaScript webView.getSettings () SetJavascriptenabled (VERDADERO). ; // Especifique la página de descarga webView.loaTurl ("http: // site / android");)

Dado que la solicitud utilizará Internet, debe configurar el permiso para acceder a Internet en el archivo manifiesto.

Allí, en el manifiesto, modificamos la línea para la pantalla, eliminando el título de nuestra aplicación (FAT resaltado):

android: Theme \u003d "@ Style / Theme.ApPompat.noActionBar">

Iniciar la aplicación. A nuestra disposición, apareció la vista más sencilla de las páginas web, pero con una desventaja. Si hace clic en cualquier enlace, iniciará automáticamente el navegador predeterminado y la nueva página ya se mostrará allí. Más precisamente, fue antes. En los nuevos dispositivos, al iniciar la aplicación, el navegador se abre inmediatamente.

Para resolver este problema y abrir enlaces en su programa, debe anular la clase Webviewclient. Y permitir que nuestra aplicación procese enlaces. Añadir la clase inversionada en el código:

Clase privada MyWebViewClient extiende a WebViewClient (@targetapi (build.version_codes.n) @Override Public Boolean ShouseOverRideurLoading (Webview View, WebresourceReSest Solicitud) (View.loaDurl (Solicitud.geturl () Tostring ()) ;. Devuelve verdadero;) // a Viejo @Override Public Boolean Highingrideuring (Ver.loadurl (URL); devuelve verdadero;))

Luego en el método encreate () Determinar copia Mywebviewclient.. Puede estar en cualquier lugar después de la inicialización del objeto:

Webview.setwebViewclient (nuevo MyWebViewClient ());

Ahora en nuestro apéndice creado Webviewclient.Lo que le permite descargar cualquier URL especificada seleccionada en el contenedor en sí, y no ejecute el navegador. Esta funcionalidad es responsable del método en el que especificamos la URL actual y necesaria. Valor de devolución cierto. Sugiere que no necesitamos iniciar un navegador de terceros, e impulsar independientemente el contenido en el enlace. En la versión de la API 24, la versión sobrecargada del método ha agregado, considere esta circunstancia.

Ejecute el programa y asegúrese de que los enlaces se descarguen ahora en la propia aplicación. Pero ahora surgió otro problema. No podemos volver a la página anterior. Si hacemos clic en el botón Atrás en su dispositivo, simplemente cierre su solicitud. Para resolver un nuevo problema, debemos manejar el botón Presione el botón ATRÁS. Añadimos un nuevo método:

@Override Public Void Onbackpressed () (IF (webview.canGoBack ()) (WebView.Goback ();) else (super.onbackpressed ();))

Debemos verificar que los soportes naveguen en la página anterior. Si la condición es verdadera, entonces se llama el método regresa ()Lo que nos devuelve a la página anterior un paso atrás. Si hay varias páginas de este tipo, entonces podemos regresar constantemente a la primera página. En este caso, el método siempre devolverá el valor. cierto.. Cuando regresemos a la primera página con la que comenzó el viaje en Internet, el valor volverá. falso Y el botón de respaldo presionando el botón Atrás ya tendrá el sistema en sí mismo que cierra la pantalla de la aplicación.

Ejecute la solicitud de nuevo. Usted tiene mi propio navegador web, que le permite ir en los enlaces y regresar a la página anterior. Después de haber estudiado la documentación, puede equipar la aplicación y otros Bollos deliciosos para su navegador.

Si necesita parte de los enlaces que llevan a su sitio para abrir en el navegador, abrir enlaces locales en la aplicación, luego aplicar una condición con diferentes valores devueltos.

Clase pública MyWebViewClient extiende a WebViewClient (@Override Public Boolean HoodrideurSing (URI (URI.Parse (URL), URI.Parse (URL)); View.getContext (). Startactivity (intención); devuelve verdadero;))

Método universal que todos los enlaces locales se abrirán en la aplicación, el resto en el navegador (Cambiar una línea):

Clase pública MyApPWebViewClient se extiende a WebViewClient (@Override Public Boolean Hoolean HooleanRideurning (Webview View, String URL) ( if (uri.Parse (URL) .gethost (). longitud () \u003d\u003d 0) (Devolver falso;) intención intencional \u003d nueva intención (intent.action_view, uri.Parse (URL)); ver.getcontext (). Startactivity (intención); Devuelve verdadero; ))

Y ahora un pequeño complican un ejemplo, para que el usuario tenga una alternativa a los navegadores estándar.

Para ser más claro, rectamos un ejemplo de la siguiente manera. Crea dos actividades. En la primera actividad, coloque un botón para cambiar a la segunda actividad, y coloque el componente en la segunda actividad.

En el manifiesto, le recetamos un filtro de la segunda actividad.

Código para el botón para transitar a la segunda actividad.

Vacío público ONCLICK ("Intence Intenscript \u003d New intent"; intent.setdata (uri.Parse ("http: // Sitio / Android /")); Startactivity (intención);)

Hemos creado su propia intención con el filtro y proporcionamos datos, la dirección del sitio.

La segunda actividad debe tomar datos:

Paquete ru.alexanderklimov.testapplication; Importar android.net.uri; Importar android.support.v7.app.appCompatactivity; Importar android.os.bundle; Importar android.webkit.webview; Importar Android.Webkit.WebViewClient; La secundaria de clase pública extiende la compatibilidad de la aplicación (SavedInstancestate); setcontentview (r.layout.activevity_segundo); Uri url \u003d getIntent (). GetData (); WebView WebView \u003d FindViewByID (R.ID.WebView); Webview.setwebViewClient (nueva devolución de llamada ()); Webview.loaurl (URL.Tostring ()); .

En el filtro para la segunda actividad, indicamos dos acciones.

Esto significa que cualquier actividad (lectura, aplicaciones) puede causar su actividad con un mini navegador de acuerdo con el mismo principio. Comience en el estudio en una ventana separada, cualquier proyecto antiguo o cree uno nuevo y agregue un botón y escriba el mismo código que utilizamos para hacer clic en el botón.

Ejecute la segunda aplicación (la primera aplicación se puede cerrar) y haga clic en el botón. No iniciará la primera aplicación con la pantalla inicial, pero inmediatamente la segunda actividad con un mini navegador. Por lo tanto, cualquier aplicación puede iniciar el navegador, sin saber el nombre de la clase de su actividad, pero usando solo la cadena "ru.alexanderklimov.browser"transmitido por B. Intención. Al mismo tiempo, su actividad con el navegador debe tener una categoría y datos predeterminados. Déjame recordarte:

Puede enviar su cadena en forma de constante de cadena e informar a todos los usuarios potenciales de su navegador, ya que pueden ejecutarlo. Pero Android ya tiene una constante tan lista. Action_view.que en la ayuda de la documentación es la siguiente:

Public Static Final Java.lang.String Action_View \u003d "Android.Intent.Inter.Action.view";

Reescribo el código para el botón para la segunda aplicación.

Intención (android.content.intent.action_view, uri.Parse ("http: // sitio / Android /")); Startactivity (intención);

Que pasará esta vez? Recordamos que tenemos dos acciones, incluyendo android.intent.action.view.. Por lo tanto, nuestra primera solicitud con el navegador también debe reconocer este comando cuando un usuario usa este código. En el emulador, al menos hay uno de esos "navegadores" del programa, y \u200b\u200bahora se ha agregado nuestra segunda actividad de la primera solicitud. Aparecerá una selección de dos aplicaciones en la pantalla.

Y si elimina todos los navegadores alternativos y se deja solo su programa, entonces no habrá otra opción. Su navegador será el principal. Y si alguna aplicación quiere iniciar la página web de la manera especificada, su programa se abrirá.

Pequeño comentario. Si reemplaza la última línea a tal:

Startactivity (intent.createchooser (intención, "maullida ..."));

En la ventana Selección del programa, en lugar de la línea superior "Abrir con" o su traducción local aparecerá su fila. Pero esto no es lo principal. Si por alguna razón no habrá navegador en el dispositivo, entonces esta opción de código no causará el colapso de la aplicación, a diferencia de la opción inicial. Por lo tanto, use la opción propuesta por el bien de la confiabilidad.

Vamos a crear una nueva aplicación: navegador para dispositivos Android, con sus propias manos, será interesante, y el código no tendrá mucho.

Aplicación de navegador Android

Inicie el estudio Android Android y cree un nuevo proyecto, nombre de la aplicación Mi sitio, dominio de la compañía a su discreción, ingresé al sitio de dominio del sitio. Hacemos clic en Siguiente, en la siguiente pestaña, deje todo sin cambiar, haga clic en Siguiente y luego ya seleccionado Actividad vacía, Lo dejaré, luego en la última pestaña cambiaré el nombre del diseño con Activity_Main en Main, y presione el final.

Estudio Android. Prepare los archivos del proyecto, tomará algún tiempo. La ventana principal abrirá dos archivos, main.xml. y Mainactividad.Java.Empecemos a trabajar en este último. CAMBIAR APPCOMATIVIDAD APROBACIÓN ADMENTIDA EN LA ACTIVIDAD, MANTENER.

Añadiendo permisos para manifestar

Luego abre el archivo Androidmanifest.xml. y agregar permiso de usuario después de la primera sección permiso de usuario,

¿Cuál sería nuestra aplicación tendrá acceso a Internet? Guardar y cerrar AndroidManifest.xml.

Ir al archivo. Main.xml., Está en el camino RES / Layout / Main.xml, elimine la cadena Android: Text \u003d "Hola Word!" Cambie completamente la vista de texto en WebView, desde las propiedades de la capa principal relativelyout, elimine los sangrías innecesarios (Paddingbottom, Paddingleft, PaddingRight, Paddingtop).

Para WebView Agregar la propiedad Android: ID \u003d "@ + id / webview", cambiar Android: Layout_Width \u003d "Wrap_Content" y Android: Layout_Height \u003d "Wrap_Content" en Android: Layout_width \u003d "Match_Parent" y Android: Layout_height \u003d "Match_Parent" para Lo que nuestro elemento WebView estaba en toda la pantalla.

Lógica de códigos en Java

Con el archivo main.xml, terminamos, moviéndonos a Mainactividad.Java.. Añadir una variable vIRGINIA OCCIDENTAL. Tipo WebView.Lo asignamos un elemento al encontrarlo utilizando la función FindViewByID (), describimos la configuración de WV, en particular, lo que permite que los scripts de Java en WebView, especifiquen la dirección de descarga del sitio a nuestro navegador, ejecutaré yandex, aplicando la función de Loadurl (" http: // ya.ru ").

la principal capacidad de clase pública extiende la actividad (WVVIEW WV; @Override protegió el vacío Oncreate (Bundle SavedInstanceStancate) (super.oncreate (SavedInstancestate); setcontentview (r.layout.main); wv \u003d (webview) findworkbyid (r.id.webview); Websettings Ajustes \u003d wv.getsettings (); configuraciones.setjavascriptabled (verdadero); wv..setwebviewclient (nuevo webviewclient ());)

También a continuación escribimos el manejo del botón Presione nuevamente en el dispositivo.

@Override Public Void Onbackpressed () (IF (WV.CANGOBACK ()) (wv.goback ();) else (super.onbackpressed ();))

Ejecutar una aplicación en el emulador.

Presione el botón de inicio, este es un triángulo verde en la barra de herramientas Androidstudio.Nuestro emulador comenzará, y si todo se realiza correctamente, después de algún tiempo, la búsqueda de Yandex comenzará en el navegador, puede colocar un teclado virtual y buscar algo, todo funciona bien.

Cierre el programa sin cerrar el emulador haciendo clic en el rectángulo rojo, se detiene en lugar de comenzar, cambie la dirección a arbitraria, i "propiaria" mi sitio "https: // sitio",

haga clic en Guardar y vuelva a ejecutar el programa, esta vez todo lo que sucederá más rápido, con el todo el sitio, en la sección de programación para Android hay artículos y videos Cómo instalar y configurar AndroidStudio, hacer un emulador de Android y ejemplos simples de programas.

Texto completo Androidmanifest.xml

Texto completo main.xml.

Mainactividad de texto completo.Java.

paquete ru.maxfad.mysite; Importar android.app.activeivity; Importar android.os.bundle; Importar Android.Webkit.Websettings; Importar android.webkit.webview; Importar Android.Webkit.WebViewClient; La principal capacidad de clase pública extiende la actividad (WVVIEW WV; @Override protegió el vacío Oncreate (Bundle SavedInstanceStancate) (super.oncreate (SavedInstancestate); setcontentview (r.layout.main); wv \u003d (webview) findworkbyid (r.id.webview); Websettings Ajustes \u003d wv.getsettings (); configuraciones.setjavascriptenabled (verdadero); wv..setwebviewclient (nuevo webviewclient ());) @Override Public Void Onbackpressed () (IF (WV.CANGOBACK ()) (Wv.Goback (); ) Else (super.onbackpressed ();)))

En este video, se muestra en detalle cómo crear una aplicación de navegador para dispositivos Android:

Ya hemos comenzado completamente a asegurarnos con software personal, recuerde nuestra maravillosa calculadora y convertidor. Y en esta lección, aprenderemos cómo crear un navegador simple, con la ayuda de los cuales empujará los espacios de Internet. De acuerdo, surfea la red en su propio navegador, esto es más agradable que hacer esto a Opera o Chrome (apenas más conveniente, pero más agradable :)). Crea un nuevo proyecto, los nombres se eligen tradicionalmente. Personalmente, generalmente no creo todo desde cero cada vez, pero simplemente abro lo que es, y limpié el código completo al estado original de la actividad en blanco. Haz lo más conveniente para ti.

Por lo tanto, describe brevemente el volumen y los específicos del seguimiento. Necesitamos crear un artículo. en el que va a escribir un código que crea nuestro navegador web personal, para equiparlo con funciones básicas, prescribe permiso para usar Internet por nuestra aplicación en el archivo manifiesto y escribir un controlador de botones de hardware "Atrás" En el dispositivo (es decir, lo que sucederá en nuestro navegador cuando haga clic en este botón).

Empecemos. Abre el archivo actividad_main.xml.. Crea hay un solo elemento allí Somos suficientes para que implementemos un navegador web:

< WebView xmlns: android= "http://schemas.android.com/apk/res/Android" Android: Layout_Height \u003d "Match_Parent" Android: Layout_Width \u003d "Match_Parent" Android: ID \u003d "@ + ID / WEB" /\u003e

La ventana de Markup se verá así:

Después de eso, vamos a entender inmediatamente el archivo. Androidmanifest.xml.. Lo abrimos y agregamos dos líneas allí, uno es permiso para que la aplicación use Internet, la otra es cambiar el estilo de la aplicación y esconder más con precisión el panel "Título" de la aplicación (paneles con el encabezado de la aplicación) Con el objetivo de proporcionar más espacio a la ventana del navegador para mostrar las páginas.

Escribimos una cadena de permiso para usar Internet. antes de Etiqueta de apertura ...:

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

Ahora agregue a la fila configurando nuestro Actividadcomando para ocultar el título (la línea inferior resaltada en grasa, también se encuentra en Androidmanifest.xml.):

< activity android: name= ".MainActivity" android: label= android: TEMA \u003d "@Android: Style / Theme.NotitleBar" >

Ahora ve a la parte más importante y responsable del trabajo, escribiendo un código Java. Abra el archivo principal -java y escriba las siguientes (las explicaciones se dan en el código después de los signos //, quien no se dio cuenta):

paquete home.myapplication; Importar android.app.activeivity; Importar android.app.alertdialog; Importar Android.Content.ContentValues; Importar Android.Content.Intent; Importar android.database.cursor; Importar android.database.sqlite.sqlitedatabase.; Importar android.database.sqlite.sqliteopenhelper.; Importar android.support.v7.app.actionBaractividad; Importar android.os.bundle; Importar android.util.log; Importar android.view.keyEvent; Importar android.view.menu; Importar android.view.menuitem; Importar android.view.view; Importar android.webkit.webview; Importar Android.Webkit.WebViewClient; Importar android.widget.button; Importar android.widget.editText; Importar android.widget.radiobutton; Importar Android.Widget.TextView; Clase pública Mainactive extiende la actividad ( // declarar una webview de tipo variable Webview privado mweb; // Crear una clase de navegador web tipo (webviewclient), que está configurado // Permiso predeterminado para procesar todos los enlaces dentro de esta clase, // Sin referirse a programas de terceros: Clase privada WebViewer extiende a WebViewCLIENTE ((Vista webvieta, URL de cadena) (VER LADURL (URL);. Retorno verdadero;)) Vacío público Oncreate (Bundle SavedInstancateState) (Super Oncreate (SavedInstancateState); FETCONTENTVIEW (RAYOUT ACTIVIDADY_MAIN) ..; // atar la variable anunciada de tipo webview a los creados por nosotros // Artículo webview en el archivo Active_main.xml: Mweb \u003d (WebView) FindViewByID (R. ID. WEB); // Connectamos los scripts de Java a este artículo: Mweb. Ritmos (). Setjavascriptabled (verdadero); // Configure la página que descargará cuando se inicie, puede ingresar a cualquier: Mweb. Loadurl ( "http://developeroleg.ucoz.ru/"); // Personaliza el navegador para nuestro elemento webview, conectamos lo anterior // Cliente web con el que se verán las páginas: Mweb. SetWebViewClient (nuevo webviewer ()); ) // Escribimos el código de procesamiento para presionar el botón ATRÁS en el dispositivo, lo que nos permitirá cuando haga clic en // En el botón "Atrás", vaya a la página anterior, y no solo cierre las aplicaciones. // cerrará el botón "atrás" solo si estamos en el inicio // Página, que indicó anteriormente: @Override Public Void Onbackpressed () (SI (MWEB. CANGOBACK ()) (Mweb. Golpeo ();) else (super. Onbackpressed ();)))))

¡Eso es todo! De hecho, todo es bastante simple y después de las obras cortas, tenemos nuestro propio navegador, por supuesto, es bastante simple y no tiene opciones, sino comprender la esencia de la creación de tales aplicaciones, esto es bastante suficiente.