给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.

给xamarin打个电话

试试这个:

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