Android WebView haga clic en abrir dentro de WebView, no en un navegador predeterminado

Hice una aplicación de muestra usando WebView, en esa vista web la URL proviene de los servicios web. Está funcionando bien, pero si hago clic en cualquier enlace dentro de ese WebView, automáticamente se usa el navegador web predeterminado. Pero quiero abrir solo en la vista web de mi aplicación. Aquí mi código:

WvBikeSite = (WebView) findViewById(R.id.wv_bikeWebsite); wvBikeSite.loadUrl(getBundle.getString("www")); 

Debes configurar un webViewClient para tu webView.

Muestra:

 this.mWebView.setWebViewClient(new WebViewClient(){ @Override public boolean shouldOverrideUrlLoading(WebView view, String url){ view.loadUrl(url); return true; } }); 

Necesita configurar un WebViewClient para anular ese comportamiento (abrir enlaces usando el navegador web). Obviamente tiene su WebView declarado, pero luego configura un WebViewClient así:

 WebView myWebView = (WebView) findViewById(R.id.webview); myWebView.setWebViewClient(new WebViewClient()); 

Luego necesita definir su WebViewClient ():

 private class MyWebViewClient extends WebViewClient { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { if (Uri.parse(url).getHost().equals("www.example.com")) { // Designate Urls that you want to load in WebView still. return false; } // Otherwise, give the default behavior (open in browser) Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); startActivity(intent); return true; } } 

Luego, inicie su WebViewClient:

 WebView myWebView = (WebView) findViewById(R.id.webview); myWebView.setWebViewClient(new MyWebViewClient()); 

http://developer.android.com/guide/webapps/webview.html

Me enfrento al mismo problema y lo solucioné agregando una sola línea.

 webview.setWebViewClient(new WebViewClient()); 

y esto resolvió mi problema

Debe llamar a wvBikeSite.setWebViewClient, por ejemplo:

  MyWebViewClient wvc = new MyWebViewClient(); wvBikeSite.setWebViewClient(wvc); 

Donde MyWebViewClient sobrescribe shouldOverrideUrlLoading, a saber:

 private class MyWebViewClient extends WebViewClient { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; } } 

Siempre puede abrir la url dentro de la vista web al usar esto:

  @Override public void onCreate(Bundle savedInstanceState) { webview.setWebViewClient(new MyWebViewClient()); webview.getSettings().setJavaScriptEnabled(true); webview.getSettings().setPluginsEnabled(true); } private class MyWebViewClient extends WebViewClient { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; } @Override public void onLoadResource(WebView view, String url){ } } 

Me gustó esto y funciona perfectamente …

 mWebView.setWebViewClient(new WebViewClient() { public boolean shouldOverrideUrlLoading(WebView view, String url) { if (url != null && url.startsWith("http://")) { mWebView.loadUrl(url); return true; } else { return false; } } }); 

Prueba este, ese método está en desuso.

 public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) { return super.shouldOverrideUrlLoading(view, request); } 

Aquí está mi código de cómo resolver el problema anterior (cuando cliquea en el enlace, solicita el navegador predeterminado para activar el enlace)

 import android.os.Bundle;import android.annotation.SuppressLint;import android.app.Activity; import android.view.Menu;import android.webkit.WebChromeClient; import android.webkit.WebView;public class MainActivity extends Activity{ `@SuppressLint("SetJavaScriptEnabled")@Override protected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);String url="http://google.com";WebView Webview=(WebView) this.findViewById(R.id.webView1); Webview.getSettings().setJavaScriptEnabled(true);Webview.loadUrl(url);}@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;}`} 

Esto abrirá cualquier enlace en particular solo en tu aplicación …

 WebView web; web = (WebView) findViewById(R.id.web); web.setWebViewClient(new WebViewClient(){ @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { // TODO Auto-generated method stub super.onPageStarted(view, url, favicon); } @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { if (url != null && url.startsWith("http://www.xplorerstrick.net")) { view.loadUrl(url); progDailog.show(); return true; } else { Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); startActivity(intent); return true; } } } 
 webview.setWebViewClient(new WebViewClient()); webview.loadUrl(url); 

Establezca un cliente de vista web.

La mayor parte de la respuesta es correcta, pero tenga en cuenta que: SupportMultipleWindows se debe establecer como falso.

 mWebView.getSettings().setSupportMultipleWindows(false); 

y ahora configure webViewClint y obtenga la URL de carga.

 mWebView.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url){ Log.d(TAG,"URL: "+url); view.loadUrl(url); /** * if you wanna open outside of app if (url != null && url.startsWith(URL)) { view.loadUrl(url); return false; } // Otherwise, give the default behavior (open in browser) Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); startActivity(intent);**/ return true; } @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { super.onPageStarted(view, url, favicon); } @Override public void onLoadResource(WebView view, String url) { super.onLoadResource(view, url); } @Override public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); } }); 

Usa este código:

 // Force links and redirects to open in the WebView instead of in a browser mWebView.setWebViewClient(new WebViewClient());