C# 使用Android Xamarin WebView html链接打开电话拨号程序
我正在尝试使用ShouldOverrideUrlLoading()方法,但调用该方法时应用程序崩溃 下面是我的代码: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 = "
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");
...
}