2015-04-10 1 views
0

Что я хочу - это поддерживать ссылки в веб-представлении до тех пор, пока они являются частью сайта, но внешние ссылки должны запускаться во внешний веб-браузер. Также на сайте у меня есть телефонная связь с tel: 555-323-2323, если я использую код под номером телефона и запускаю приложение для телефона, но внешние ссылки не работают.Как фильтровать телефон и другие веб-ссылки в WebView Android

@Override 
    public boolean shouldOverrideUrlLoading(WebView view, String url) { 
     view.loadUrl(url); 
     if (url.contains("tel:")) { 
      startActivity(new Intent(Intent.ACTION_DIAL, Uri.parse(url))); 
      return true; 
     } else { 
      return true; 
     } 
     if (Uri.parse(url).getHost().equals("www.example.com")) { 
      // This is my web site, so do not override; let my WebView load the page 
      return false; 
     } 
     // Otherwise, the link is not for a page on my site, so launch another Activity that handles URLs 
     Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); 
     startActivity(intent); 
     return true; 

ответ

0

Основная причина, по которой вещи не работают, состоит в том, что у вас есть if-else, и обе ветви возвращают true. Весь код после инструкции else недостижим. Удалите инструкцию else или измените эту логику.

0
  • Убрать из печати инструкцию (view.loadUrl(url)).
  • Удалить else часть первого условия.

Ваш код будет выглядеть примерно так:

@Override 
public boolean shouldOverrideUrlLoading(WebView view, String url) { 
    if (url.contains("tel:")) { 
     startActivity(new Intent(Intent.ACTION_DIAL, Uri.parse(url))); 
     return true; 
    } 
    if (Uri.parse(url).getHost().equals("www.example.com")) 
     // This is my web site, so do not override; let my WebView load the page 
     return false; 

    // Otherwise, the link is not for a page on my site, so launch another Activity that handles URLs 
    Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); startActivity(intent); 
    return true; 
} 
0

Я использую это решение:

@Override 
    public boolean shouldOverrideUrlLoading(WebView view, String url) { 
     if (url.contains("tel:")) { 
      startActivity(new Intent(Intent.ACTION_DIAL, Uri.parse(url))); 
      return true; 
     } 
     if (Uri.parse(url).getHost().equals(URL)) { 
      // This is my web site, so do not override; let my WebView load the page 
      return super.shouldOverrideUrlLoading(view, url); 
     } 
     return super.shouldOverrideUrlLoading(view, url); 
    } 

 Смежные вопросы

  • Нет связанных вопросов^_^