我正试图在iPhone应用程序中发起呼叫。
此相关代码按预期工作并打开Safari:
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://www.apple.com"]];
但是,当我用tel URL替换http URL时,生成的代码不会调用手机应用程序:
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"tel:3035551212"]];
不会生成异常或警报(在模拟器或设备上)。
知道我的调用可能会出现什么问题?
感谢。
答案 0 :(得分:43)
iphone将使用下面列出的任一格式拨号。 但是,如果你在模拟器中,它什么也不会做。我花了30分钟的时间才想到这一点。
[[UIApplication sharedApplication]
openURL:[NSURL URLWithString:@"tel://15415551234"]];
[[UIApplication sharedApplication]
openURL:[NSURL URLWithString:@"tel:15415551234"]];
[[UIApplication sharedApplication]
openURL:[NSURL URLWithString:@"tel:1-541-555-1234"]];
答案 1 :(得分:6)
正如@bentford所说,当你试图点击联系人应用程序上的手机时,模拟器确实会显示警报,但这只是一个警报,因为应用程序会检查是否{{1设备是否支持协议。
添加到他写的内容中,您可能还希望添加支持以转义任何特殊字符或空格,如:
tel:
希望它有所帮助。
干杯。
答案 2 :(得分:6)
(
, )
和stringByAddingPercentEscapesUsingEncoding
实际上没问题。 +
,/
和空格也是如此。它是一个URL,因此转义似乎很自然。
如果我猜对了,如果你正确逃脱,Apple的常规电话号码识别将在tel:
计划处理程序中使用。
(缺少使其成为评论的声誉)
答案 3 :(得分:4)
如果您的电话号码中包含(
或)
,则手机应用将无法启动。
答案 4 :(得分:3)
使用tel:{phone-number}
并没有遇到任何问题,并以同样的方式调用它。但是只适用于iPhone设备。
我要做的一件事就是从电话字符串中删除多余的字符(如所有括号,空格,短划线和点)。上面的一些例子(但不是原帖)有破折号。这可能是问题所在。
答案 5 :(得分:3)
我发现问题是由于字符不允许tel:// URI - 以下代码解决了我的问题:
NSMutableCharacterSet *charSet = [NSMutableCharacterSet new];
[charSet formUnionWithCharacterSet:[NSCharacterSet whitespaceCharacterSet]];
[charSet formUnionWithCharacterSet:[NSCharacterSet punctuationCharacterSet]];
[charSet formUnionWithCharacterSet:[NSCharacterSet symbolCharacterSet]];
NSArray *arrayWithNumbers = [str componentsSeparatedByCharactersInSet:charSet];
NSString *numberStr = [arrayWithNumbers componentsJoinedByString:@""];
答案 6 :(得分:2)
我在尝试向UIAlertView
添加“呼叫”按钮时遇到了这个问题。我有以下代码来处理呼叫:
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
if (buttonIndex != 0)
{
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"tel:1-602-555-1212"]];
}
}
它不会像你一样打开任何东西。我甚至尝试了常规http
网址。事实证明我忘了将delegate
设置为self
。这也可能是你的问题。
答案 7 :(得分:1)
我遇到了同样的问题,最后我发现原因是电话号码中有一个空格(为了更好的格式化)。移除空间后它工作正常。
答案 8 :(得分:1)
通过网址方案拨打电话的一些其他信息(因为我认为有人可能会发现它很有用)
How to use tel: with * (star, asterisk) or # (hash, pound) on iOs?
答案 9 :(得分:0)
以下是有关如何在2018年获得电话号码(iOS 11和12最常见)的更新:
NSString *phoneNumberURLString = [@"tel://" stringByAppendingString:[result.phoneNumber
stringByAddingPercentEncodingWithAllowedCharacters:
[NSCharacterSet URLPathAllowedCharacterSet]]];
NSURL *phoneNumberURL = [NSURL URLWithString:phoneNumberURLString];
samiq's answer是我最初使用的,直到我发现由于未正确退出手机而创建的NSURL
无效(后来又传递到集合对象中)导致应用崩溃数字格式如下:(###) ###-####
。前面的代码解决了这个问题。
答案 10 :(得分:-3)
网址应为tel:// 3035551212而不是tel:3035551212 ... 添加//它应该可以工作。