2013-03-04 3 views
4

Я использую webview в своем приложении для Android.http: // ссылка href не работает в Android

У меня есть 3 кнопки 1 для ссылки на веб-сайт, чтобы позвонить по номеру и по электронной почте.

При первом звонке мой сайт работал, http://www.somelink.com.

Но мой телефон: ссылка не работала. Поэтому я включил некоторый код, который запустил мою кнопку tel :.

Проблема в том, что он сделал мой сайт или кнопку http: не работает?

Кнопка html ничего не делает, когда вы нажимаете на нее.

package de.sonae.novolam; 

import android.annotation.SuppressLint; 
import android.app.Fragment; 
import android.content.Intent; 
import android.net.Uri; 
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.webkit.WebView; 
import android.webkit.WebViewClient; 


@SuppressLint("SetJavaScriptEnabled") 
public class DFragment extends Fragment { 

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
View mainView = (View) inflater.inflate(R.layout.dfragment, container, false); 
WebView webView = (WebView) mainView.findViewById(R.id.webview); 
webView.getSettings().setJavaScriptEnabled(true); 

webView.setWebViewClient(new WebViewClient() { 
    @Override 
    public boolean shouldOverrideUrlLoading(WebView wv, String url) { 
    if (url.startsWith("tel:")) { 
      Intent intent = new Intent(Intent.ACTION_DIAL, 
        Uri.parse(url)); 
      startActivity(intent); 
    } 

    return true; 
} 
    }); 
webView.loadUrl("file:///android_asset/contact.html"); 
return mainView; 
} 

public boolean shouldOverrideUrlLoading(WebView webView, String url) { 
    if(url.startsWith("http:") || url.startsWith("https:")) { 
     webView.loadUrl(url); 
     Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); 
     startActivity(intent); 
    } 

    else if (url.startsWith("mailto:")) { 

    } 

    // Otherwise allow the OS to handle it 
    Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); 
    startActivity(intent); 
    return true; 
} 
} 

ответ

3

Вы должны указать веб-просмотра, когда обрабатываются URL-адрес загрузки вашей собственной личностью, и когда вы хотите сделать обработку делегата на нем. Просто верните true с shouldOverrideUrlLoading, когда вы обработали загрузку URL своим действием. Возвращение иначе ложь:

webView.setWebViewClient(new WebViewClient() { 
    @Override 
    public boolean shouldOverrideUrlLoading(WebView wv, String url) { 
     if (url.startsWith("tel:")) { 
      Intent intent = new Intent(Intent.ACTION_DIAL, 
        Uri.parse(url)); 
      startActivity(intent); 

      return true; // we handled the url loading 
     } 

     return false; // let WebView handle this event 
    } 
}); 
7

У вас есть два метода shouldOverrideUrlLoading в вашем коде. Только первый из них фактически вызывается WebView. Переместите код со второго shouldOverrideUrlLoading на первый, и он будет работать.

webView.setWebViewClient(new WebViewClient() { 
    @Override 
    public boolean shouldOverrideUrlLoading(WebView wv, String url) { 
     if (url.startsWith("tel:")) { 
      Intent intent = new Intent(Intent.ACTION_DIAL, Uri.parse(url)); 
      startActivity(intent); 
      return true; 
     } else if(url.startsWith("http:") || url.startsWith("https:")) { 
      Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); 
      startActivity(intent); 
      return true; 
     } else if (url.startsWith("mailto:")) { 
      // TODO : handle mail url 
      return true; 
     } 

     return false; 
    } 
}); 
1

Метод shouldOverrideUrlLoading должен вернуть истину, если вы хотите переопределить (то есть, предотвратить обработку по умолчанию) или ложным, если вы хотите, чтобы все работало нормально.

@Override 
public boolean shouldOverrideUrlLoading(WebView wv, String url) { 
    if (url.startsWith("tel:")) { 
     Intent intent = new Intent(Intent.ACTION_DIAL, Uri.parse(url)); 
     startActivity(intent); 
     return true; 
    } 

    return false; 
}