2017-02-02 3 views
0

Ich versuche, die ShoulderOverrideUrlLoading() Methode verwenden, aber die App stürzt ab, wenn ich es anrufe.Open Phone Dialer mit einem Android Xamarin WebView HTML-Link

Unten ist mein Code:

private class HybridWebViewClient : WebViewClient 
     { 


      public override bool ShouldOverrideUrlLoading(WebView webView, string url) 
      { 

       var tel = "tel:"; 
       if (url.StartsWith(tel)) 
       { 

        var uri = Android.Net.Uri.Parse(url); 
        var intent = new Intent(Intent.ActionDial, uri); 
        var act = new Activity(); 
        act.StartActivity(intent); 
       } 

      } 
     } 

Vielen Dank im Voraus!

Antwort

2

Das Problem in den folgenden Codes liegt Snippet:

var act = new Activity(); 
act.StartActivity(intent); 

Verfahren StartActivity sollte von aktuellen context statt eines neuen Activity aufgerufen werden. So müssen Sie den aktuellen context-HybridWebViewClient weitergeben müssen:

public class HybridWebViewClient : WebViewClient 
{ 
    Context context; 
    public HybridWebViewClient(Context context) 
    { 
     this.context = context; 
    } 

    public override bool ShouldOverrideUrlLoading(WebView view, string url) 
    { 
     var tel = "tel:"; 
     if (url != null) 
     { 
      if (url.StartsWith(tel)) 
      { 

       var uri = Android.Net.Uri.Parse(url); 
       var intent = new Intent(Intent.ActionDial, uri); 
       context.StartActivity(intent); 
      } 
     } 
     return true; 
    } 
} 

Und in der OnCreate Methode:

protected override void OnCreate(Bundle bundle) 
{ 
    base.OnCreate(bundle); 
    ... 
    webview.SetWebViewClient(new HybridWebViewClient(this)); 
    webview.LoadUrl("http://example.com"); 
    ... 
} 
0

Was ist in der Craash Dump? Ist das verwandt?

shouldOverrideUrlLoading (WebView-Ansicht, String-URL) Diese Methode wurde in API-Ebene 24 nicht weiter unterstützt. Verwenden Sie stattdessen "sumoOverrideUrlLoading" (WebView, WebResourceRequest).