2013-08-01 3 views
19

У меня есть этот код, но не потому, что он работает, он продолжает открываться в веб-браузере, и я хочу, чтобы ссылки не принадлежали моему веб-сайту открытым в браузере по умолчанию. Есть идеи? благодаряОткрытые внешние ссылки в браузере с андроид webview

private class CustomWebViewClient extends WebViewClient { 
     @Override 
      public boolean shouldOverrideUrlLoading(WebView view, String url) { 
       if(url.contains("message2space.es.vu")){ 
       view.loadUrl(url); 
       return true; 
      }else{ 
       return super.shouldOverrideUrlLoading(view, url); 
      } 

      } 
     } 

ответ

61

Проблема заключается в том что вам нужно отправить Intent на веб-браузере по умолчанию, чтобы открыть ссылку. То, что вы делаете, это просто вызвать другой метод в вашем веб-браузере для обработки ссылки. Всякий раз, когда вы хотите, чтобы другое приложение обрабатывало что-то, вам нужно использовать Intents. Попробуйте использовать этот код.

private class CustomWebViewClient extends WebViewClient { 
     @Override 
      public boolean shouldOverrideUrlLoading(WebView view, String url) { 
       if(url.contains("message2space.es.vu")) { 
       view.loadUrl(url); 
       } else { 
       Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); 
       startActivity(i); 
       } 
       return true; 
      } 
     } 
+0

Можем ли мы иметь длинный клик на слушателя Webview ссылки? – TheOnlyAnil

+0

Теперь я сделал это. Однако приложение вылетает из-за некоторого ActivityNotFoundException. – superUser

+0

@superUser Вы должны открыть свой собственный вопрос. – onit

3

Здесь очень сладкий и короткое решение

@Override 
public boolean shouldOverrideUrlLoading(WebView view, String url) { 
    Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); 
    context.startActivity(i); 
    return true; 
} 
0

Ниже у меня есть очень простое решение ..

Для Example.to нагрузки facebook.com на WebView и все другие URL в браузере ->

- Настройка OnCreate

webView.loadUrl("http://m.facebook.com"); 
    webView.setWebViewClient(new MyAppWebViewClient()); 

Сделать внутренний класс ..

общественный класс MyAppWebViewClient расширяет WebViewClient {

// handling external links as intents 
@Override 
public boolean shouldOverrideUrlLoading(WebView view, String url) { 

    if(Uri.parse(url).getHost().endsWith("facebook.com")) { 
     return false; 
    } 

    Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); 
    view.getContext().startActivity(intent); 
    return true; 
} 

}

2

Поскольку уровень API 24 shouldOverrideUrlLoading(WebView view, String url) устарела.

до даты решения:

webView.setWebViewClient(new WebViewClient() { 
     @Override 
     public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) { 
      Intent intent = new Intent(Intent.ACTION_VIEW, request.getUrl()); 
      view.getContext().startActivity(intent); 
      return true; 
     } 
    }); 
Смежные вопросы