给xamarin打个电话
本文关键字:电话 xamarin | 更新日期: 2023-09-27 18:16:03
我目前在表视图中有一个按钮。我有一个自定义单元格类和一个更新单元格方法。
public void UpdateCell (string subtitle2)
{
call.SetTitle(subtitle2, UIControlState.Normal);
call.TouchUpInside += (object sender, EventArgs e) => {
UIApplication.SharedApplication.OpenUrl(new NSUrl("tel:" + subtitle2));
};
}
然而,当我运行这段代码时,我得到一个错误。
无法初始化该类型的实例"MonoTouch.Foundation。NSUrl':原生'initWithString:'方法返回零。可以通过设置忽略此条件monotouch . objcrtime . class . throwoninitfailure为false.
试试这个:
public void UpdateCell (string subtitle2)
{
//Makes a new NSUrl
var callURL = new NSUrl("tel:" + subtitle2);
call.SetTitle(subtitle2, UIControlState.Normal);
call.TouchUpInside += (object sender, EventArgs e) => {
if (UIApplication.SharedApplication.CanOpenUrl (callURL)) {
//After checking if phone can open NSUrl, it either opens the URL or outputs to the console.
UIApplication.SharedApplication.OpenUrl(callURL);
} else {
//OUTPUT to console
Console.WriteLine("Can't make call");
}
};
}
不确定是否可以在iPhone模拟器中模拟电话,否则只需连接您的设备:-)
如其他回答所述,NSUrl
无法处理URL字符串中的空格(和其他一些符号)。这些符号应该在传递给NSUrl
构造函数之前进行编码。您可以使用NSString.CreateStringByAddingPercentEscapes
方法进行编码。另一种方法是使用。net Uri
类:
new NSUrl(new Uri("tel:" + subtitle2).AbsoluteUri)
您在这里可能遇到的问题是Uri
类解析模式。为了避免它,不要使用://
,因此,URL字符串应该看起来像"tel:(123) 345-7890"
,而不是"tel://(123) 345-7890"
Try
UIApplication.SharedApplication.OpenUrl(new NSUrl("tel://" + subtitle2));
这个错误意味着调用initWithString:
返回nil
。ObjC init*
方法可以返回nil
,而。net构造函数不能(并抛出)。
一般来说,当输入参数无效时,ObjC在init*
选择器上返回nil
。在这种情况下,我怀疑您的URL格式无效。
你的subtitle2
变量的内容是什么
我解决了同样的问题,在尝试了各种方法之后,最终发现在iOS中号码之间不应该有任何空格(而不是例如1800 111 222 333
,应该像1800111222333
)。
number = number.Replace(" ", "");
NSUrl url = new NSUrl(string.Format(@"telprompt://{0}", number));
return UIApplication.SharedApplication.OpenUrl(url);