Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用Android Xamarin WebView html链接打开电话拨号程序_C#_Android_Xamarin_Webview - Fatal编程技术网

C# 使用Android Xamarin WebView html链接打开电话拨号程序

C# 使用Android Xamarin WebView html链接打开电话拨号程序,c#,android,xamarin,webview,C#,Android,Xamarin,Webview,我正在尝试使用ShouldOverrideUrlLoading()方法,但调用该方法时应用程序崩溃 下面是我的代码: private class HybridWebViewClient : WebViewClient { public override bool ShouldOverrideUrlLoading(WebView webView, string url) { var tel = "

我正在尝试使用ShouldOverrideUrlLoading()方法,但调用该方法时应用程序崩溃

下面是我的代码:

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);
                }

            }
        }

提前谢谢

垃圾堆里有什么?这有关系吗

shouldOverrideUrlLoading(WebView视图,字符串url)
此方法在API级别24中被弃用。改为使用shouldOverrideUrlLoading(WebView、WebResourceRequest)。

craash转储中有什么?这有关系吗

shouldOverrideUrlLoading(WebView视图,字符串url)
此方法在API级别24中被弃用。改为使用shouldOverrideUrlLoading(WebView、WebResourceRequest)。

问题在于以下代码片段:

var act = new Activity();
act.StartActivity(intent);
应该从当前
上下文中调用方法
StartActivity
,而不是从新的
活动中调用方法。因此,您需要将当前的
上下文
传递给
HybridWebViewClient

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;
    }
}
OnCreate
方法中:

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

问题存在于以下代码片段中:

var act = new Activity();
act.StartActivity(intent);
应该从当前
上下文中调用方法
StartActivity
,而不是从新的
活动中调用方法。因此,您需要将当前的
上下文
传递给
HybridWebViewClient

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;
    }
}
OnCreate
方法中:

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