WebView necesita un WebViewClient para trabajar?

Estaba pasando por tutoriales de android y probé el ejemplo de WebView . Esto es lo que terminé con:

WebAppActivity

 public class WebAppActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); WebView wv = (WebView) findViewById(R.id.webView1); wv.loadUrl("http://www.google.com"); } } 

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" > <WebView android:id="@+id/webView1" android:layout_width="fill_parent" android:layout_height="fill_parent" > </WebView> </LinearLayout> 

Pero en lugar de cargar la página en la aplicación en sí, tan pronto como la aplicación se inicia el navegador predeterminado android se abre y la página se carga en el navegador en lugar de la aplicación. Cuando vuelvo a pulsar regreso a la actividad de la aplicación que muestra una pantalla en blanco.

¿Alguien sabe por qué ocurre esto?

Editar:

manifiesto

 <uses-sdk android:minSdkVersion="7" /> <uses-permission android:name="android.permission.INTERNET"/> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" > <activity android:label="@string/app_name" android:name=".WebAppActivity" > <intent-filter > <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> 

Esto fue sólo para demostrar que he añadido el permiso de INTERNET

Editar:

Tan pronto como agrego un WebViewClient ,

 wv.setWebViewClient(new WebViewClient() {}); 

La página se carga en la aplicación. ¿Es este comportamiento esperado? ¿Un WebView de Android requiere un WebViewClient? (No pudo encontrar ninguna documentación sobre el mismo)

Editar:

Me di cuenta de que este problema se produce cuando instalo el apk en un emulador que tiene las API de Google. En un emulador normal (sin las API de Google) se comporta como se esperaba.

Sí, tienes que configurar un WebViewClient que devuelva true en el método reemplazado 'shouldOverrideUrlLoading' para que tu webview cargue el url en tu aplicación.

Déjeme saber si usted quiere un ejemplo.


Editar

@Aki WebViewClient.shouldOverrideUrlLoading Documentación

Dar a la aplicación de acogida la oportunidad de hacerse cargo del control cuando una nueva url está a punto de ser cargado en el actual WebView. Si WebViewClient no se proporciona, de forma predeterminada WebView le pedirá a Activity Manager que elija el controlador adecuado para la url . Si se proporciona WebViewClient, return true significa que la aplicación host controla la url, mientras que return false significa que el WebView actual controla la url.

 private WebView webVenue; private WebSettings websettings; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.schedule_time); webVenue = (WebView)findViewById(R.id.webview_schedule_time); txtEmptyMsg = (TextView)findViewById(R.id.txtEmptyMsg); mContext = this; webVenue.getSettings().setJavaScriptCanOpenWindowsAutomatically(true); webVenue.getSettings().setJavaScriptEnabled(true); websettings=webVenue.getSettings(); webVenue.setScrollBarStyle(ScrollView.SCROLLBARS_OUTSIDE_OVERLAY); webVenue.loadUrl(URL); } } 

Todo lo mejor…

No no completamente, pero le permite hacer un montón de cosas.

Tenga en cuenta que hacer una llamada a shouldOverrideUrlLoading en WebViewClient no parece funcionar, por lo que debe hacer su procesamiento en onPageFinished.

Aquí hay una entrada en el blog que te guiará.

Para cargar una página web de url en una vista web, no hay necesidad de configurar cliente de webview. Sin cliente de webview, puede cargar una página web en su webview. Pero WebViewClient ofrece muchas ventajas para manejar la webview. Ejemplo de uso para cargar la página web desde url,

 webView.loadUrl(yoururl); 

La única razón por la que se abre la url en el navegador predeterminado de android es debido a "wv.loadUrl (" http://www.google.com ");"

Cuando carga http://www.google.com , el sitio web de Google realmente redirige la página a http://www.google.co.in (suponiendo que esté iniciando la aplicación desde India).

Si ejecuta "wv.loadUrl (" http://www.google.co.in ");", google no redirigirá la página y la primera página se abrirá en su aplicación y se abrirán más clics en el sistema navegador.

Para manejar estos nuevos clics necesitas WebViewClient.

  • Cómo detener la ejecución de JavaScript en Android Webview
  • Error al mostrar comentarios de Facebook en Android WebView mediante HTML local
  • Configuración de WebView para ver sitio de escritorio y sitio no móvil
  • Cómo obtener título de página web cargado en Android WebView?
  • Mostrar caracteres acentuados en la vista web
  • Cargar imagen desde un directorio privado local en una vista web
  • Android WebView, cómo manejar las redirecciones en la aplicación en lugar de abrir un navegador
  • WebView.zoomIn () no funciona antes de mostrar la representación
  • Android: Cómo comprobar la carga exitosa de url al usar webview.loadUrl
  • Android 4.4 KitKat accidente aleatorio (Native crash en /system/lib/libc.so)
  • Cómo obtener la url de la webView
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.