2011-12-15 11 views
7

cuando hago clic en los enlaces en mi aplicación, se abren en la misma vista web. Quiero que se abran en un navegador externo.Android Webview, haga que las direcciones URL se abran en un navegador diferente

lo hice:

myWebView.setWebViewClient(new WebViewClient() 
{ 
       @Override 
       public boolean shouldOverrideUrlLoading(WebView view, String url) { 
        return false; 
       } 

}); 

volviendo falsa hace que se cargue dentro de la misma vista web, y devolver "verdad" no hace nada sucede cuando se hace clic en un enlace.

Miré otras preguntas, pero parece que todos los demás tienen exactamente el problema opuesto. (ellos quieren enlaces para cargar en su aplicación)

¿Qué estoy haciendo mal?

+0

¿El enlace es un enlace verdadero (url) o tal vez un fragmento de JavaScript? –

+0

verdadero enlace html. – CQM

Respuesta

12

En su WebViewClient

@Override 
public boolean shouldOverrideUrlLoading(final WebView view, final String url){ 
    if (loadUrlExternally){ 
     Uri uri = Uri.parse(url); 
     Intent intent = new Intent(Intent.ACTION_VIEW, uri); 
     startActivity(intent); 
     return true; //the webview will not load the URL 
    } else { 
     return false; //the webview will handle it 
    } 
} 

De esta manera se abre una nueva ventana del navegador de la misma manera lo haría cualquier otra aplicación.

+2

esto funciona, también tiene que establecer el retorno a "Verdadero" o de lo contrario se duplicará la carga en la vista web, así como en el navegador. – CQM

1

Aquí hay una respuesta más completa. Nota: Estoy llamando desde un fragmento, por lo tanto, getActivity() antes de startActivity()

@Override 
    public boolean shouldOverrideUrlLoading(final WebView view, final String url) 
    { 
     //check if the url matched the url loaded via webview.loadUrl() 
     if (checkMatchedLoadedURL(url)) 
     { 
      return false; 
     } else 
     { 
      getActivity().startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url))); 
      return true; 
     } 

/** 
    * used to check if the loaded url matches the base url loaded by the fragment(mUrl) 
    * @param loadedUrl 
    * @return true if matches | false if doesn't or either url is null 
    */ 
    private boolean checkMatchedLoadedURL(String loadedUrl) 
    { 
     if (loadedUrl != null && mUrl != null) 
     { 
      // remove the tailing space if exisits 
      int length = loadedUrl.length(); 
      --length; 
      char buff = loadedUrl.charAt(length); 
      if (buff == '/') 
      { 
       loadedUrl = loadedUrl.substring(0, length); 
      } 

      // load the url in browser if not the OTHER_APPS_URL 
      return mUrl.equalsIgnoreCase(loadedUrl); 
     } 
     return false; 
    } 
Cuestiones relacionadas