如何使用 openURL 在 Swift 中拨打电话?
Posted
技术标签:
【中文标题】如何使用 openURL 在 Swift 中拨打电话?【英文标题】:How to use openURL for making a phone call in Swift? 【发布时间】:2014-08-06 17:23:49 【问题描述】:我已经将用于拨打电话的代码从 Objective-C 转换为 Swift,但是在 Objective-C 中,我们可以像这样设置我们想要打开的 URL 的类型(例如电话、短信、网络):
@"tel:xx"
@"mailto:info@example.es"
@"http://***.com"
@"sms:768number"
Swift 中的代码是:
UIApplication.sharedApplication().openURL(NSURL(string : "9809088798")
我读到没有为tel:
发布任何方案参数,但我不知道 Swift 是否可以检测到该字符串是否用于拨打电话、发送电子邮件或打开网站。或者我可以写:
(string : "tel//:9809088798")
?
【问题讨论】:
我看不出问题出在哪里。你试过了吗?它奏效了吗?请不要删除和转发问题。 我的问题是我想知道这对调用是否正确: UIApplication.sharedApplication().openURL(NSURL(string : "9809088798") 因为只有模拟器可以试一试 【参考方案1】:要在 swift 5.1 中进行调用,只需使用以下代码:(我已在 Xcode 11 中测试过)
let phone = "1234567890"
if let callUrl = URL(string: "tel://\(phone)"), UIApplication.shared.canOpenURL(callUrl)
UIApplication.shared.open(callUrl)
编辑: 对于 Xcode 12.4、swift 5.3,只需使用以下代码:
UIApplication.shared.open(NSURL(string: "tel://555-123-1234")! as URL)
确保你导入了 UIKit,否则它会说它在范围内找不到 UIApplication。
【讨论】:
【参考方案2】:Swift 4 及以上版本
let dialer = URL(string: "tel://5028493750")
if let dialerURL = dialer
UIApplication.shared.open(dialerURL)
【讨论】:
【参考方案3】:对于 Swift 4:
func call(phoneNumber: String)
if let url = URL(string: phoneNumber)
if #available(ios 10, *)
UIApplication.shared.open(url, options: [:],
completionHandler:
(success) in
print("Open \(phoneNumber): \(success)")
)
else
let success = UIApplication.shared.openURL(url)
print("Open \(phoneNumber): \(success)")
然后,使用函数:
let phoneNumber = "tel://+132342424"
call(phoneNumber: phoneNumber)
【讨论】:
【参考方案4】:对于 Swift 3
if let phoneCallURL:URL = URL(string:"tel://\(phoneNumber ?? "")")
let application:UIApplication = UIApplication.shared
if (application.canOpenURL(phoneCallURL))
application.open(phoneCallURL, options: [:], completionHandler: nil);
【讨论】:
【参考方案5】:下面的代码 sn-p 可以判断 SIM 卡是否存在以及设备是否能够拨打电话,如果正常则拨打电话
var info = CTTelephonyNetworkInfo()
var carrier = info.subscriberCellularProvider
if carrier != nil && carrier.mobileNetworkCode == nil || carrier.mobileNetworkCode.isEqual("")
//SIM is not there in the phone
else if UIApplication.sharedApplication().canopenURL(NSURL(string: "tel://9809088798")!)
UIApplication.sharedApplication().openURL(NSURL(string: "tel://9809088798")!)
else
//Device does not have call making capability
【讨论】:
【参考方案6】:Swift 3 的小更新
UIApplication.shared.openURL(NSURL(string: "telprompt://9809088798")! as URL)
【讨论】:
【参考方案7】:您需要记住删除空格,否则它将不起作用:
if let telephoneURL = NSURL(string: "telprompt://\(phoneNumber.stringByReplacingOccurrencesOfString(" ", withString: ""))")
UIApplication.sharedApplication().openURL(telelphoneURL)
“telprompt://”将提示用户拨打或取消,而“tel://”将直接拨打。
【讨论】:
【参考方案8】:对于 iOS 中的 Swift:
var url:NSURL? = NSURL(string: "tel://9809088798")
UIApplication.sharedApplication().openURL(url!)
【讨论】:
这将直接开始拨打号码(当然iOS 10.3之后会要求允许拨打)但是如果我需要打开填充号码的iPhone拨号器怎么办?我能做到吗?【参考方案9】:@配置文件:
问题是您的解决方案在 在 iOS7 上通话已完成。 – 6 月 19 日 13:50
&@佐瑞尔
嗯,好奇是否有解决方案可以做到这一点..可能是 对 iOS 的限制。
使用
UIApplication.sharedApplication().openURL(NSURL(string: "telprompt://9809088798")!)
您将收到呼叫/取消提示,但它会返回到您的应用程序。 AFAIK 没有办法返回(没有提示)
【讨论】:
【参考方案10】:我很确定你想要:
UIApplication.sharedApplication().openURL(NSURL(string: "tel://9809088798")!)
(请注意,在您的问题文本中,您输入的是tel//:
,而不是tel://
)。
NSURL 的字符串 init 需要一个格式正确的 URL。它不会把一堆数字变成一个电话号码。你有时会在 UIWebView 中看到电话号码检测,但这是在比 NSURL 更高的级别上完成的。
编辑:添加!根据下面的评论
【讨论】:
只是一个小小的修正 UIApplication.sharedApplication().openURL(NSURL(string: "tel://9809088798")!) 你需要使用 !在 NSURL 之后,因为它返回一个可选的。 这将直接开始呼叫号码(当然iOS 10.3之后会要求允许呼叫)但是如果我需要打开填充号码的iPhone拨号器怎么办?我能做到吗? 真棒答案先生:)【参考方案11】:你必须插入“+”\是另一种方式
private func callNumber(phoneNumber:String)
if let phoneCallURL:NSURL = NSURL(string:"tel://"+"\(phoneNumber)")
let application:UIApplication = UIApplication.sharedApplication()
if (application.canOpenURL(phoneCallURL))
application.openURL(phoneCallURL);
【讨论】:
【参考方案12】:Swift 中的独立解决方案:
private func callNumber(phoneNumber:String)
if let phoneCallURL:NSURL = NSURL(string:"tel://\(phoneNumber)")
let application:UIApplication = UIApplication.sharedApplication()
if (application.canOpenURL(phoneCallURL))
application.openURL(phoneCallURL);
现在,您应该可以使用callNumber("7178881234")
拨打电话了。
【讨论】:
问题是你的解决方案在iOS7上打完电话后没有返回应用。 嗯,好奇是否有解决方案可以做到这一点.. 可能是对 iOS 的限制。以上是关于如何使用 openURL 在 Swift 中拨打电话?的主要内容,如果未能解决你的问题,请参考以下文章
'openURL'在iOS 10.0中已被弃用:请使用openURL:options:completionHandler:而不是在Swift 3中[重复]