如何使用openURL在Swift中拨打电话?

时间:2014-06-16 19:59:41

标签: swift nsurl xcode6 openurl

我已经将用于打电话的代码从Objective-C转换为Swift,但在Objective-C中,我们可以设置我们想要打开的URL的类型(例如电话,短信,网络),如下所示:

@"tel:xx"
@"mailto:info@example.es"
@"http://stackoverflow.com"
@"sms:768number"

Swift中的代码是:

UIApplication.sharedApplication().openURL(NSURL(string : "9809088798")

我读过没有发布tel:的任何方案参数,但我不知道Swift是否可以检测该字符串是用于拨打电话,发送电子邮件还是打开网站。或者我可以写:

(string : "tel//:9809088798")

13 个答案:

答案 0 :(得分:75)

我很确定你想要:

UIApplication.sharedApplication().openURL(NSURL(string: "tel://9809088798")!)

(请注意,在您的问题文本中,您设置了tel//:,而不是tel://)。

NSURL的字符串init需要格式正确的URL。它不会将一堆数字变成电话号码。您有时会在UIWebView中看到电话号码检测,但这种情况比NSURL更高。

编辑:已添加!以下评论

答案 1 :(得分:16)

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")拨打电话。

答案 2 :(得分:6)

对于iOS中的Swift:

var url:NSURL? = NSURL(string: "tel://9809088798")
UIApplication.sharedApplication().openURL(url!)

答案 3 :(得分:6)

你需要记住删除空白或者它不会工作:

if let telephoneURL = NSURL(string: "telprompt://\(phoneNumber.stringByReplacingOccurrencesOfString(" ", withString: ""))") {
        UIApplication.sharedApplication().openURL(telelphoneURL)
    }

" telprompt://"将提示用户在" tel://"会直接打电话。

答案 4 :(得分:5)

@ confile:

  

问题是您的解决方案在之后没有返回应用程序   iOS7上的电话已经完成。 - 6月19日13:50

& @ Zorayr

  嗯,好奇,如果有一个解决方案可以做到这一点..可能是一个   对iOS的限制。

使用

UIApplication.sharedApplication().openURL(NSURL(string: "telprompt://9809088798")!)

您将收到呼叫/取消的提示,但它会返回到您的应用程序。 AFAIK没有办法返回(没有提示)

答案 5 :(得分:4)

你必须插入" +" \是另一种方式

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

答案 6 :(得分:4)

Swift 3的小更新

UIApplication.shared.openURL(NSURL(string: "telprompt://9809088798")! as URL)

答案 7 :(得分:2)

以下代码段可以判断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  
    }

答案 8 :(得分:0)

对于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);
            }
        }

答案 9 :(得分:0)

对于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)

答案 10 :(得分:0)

要快速拨打电话,只需使用以下代码:(我已经在XCode 11中进行了测试,很快5)

let phone = "1234567890"
        if let callUrl = URL(string: "tel://\(phone)"), UIApplication.shared.canOpenURL(callUrl) {
            UIApplication.shared.open(callUrl)

答案 11 :(得分:0)

Swift 4及以上

let dialer = URL(string: "tel://5028493750")
    if let dialerURL = dialer {
        UIApplication.shared.open(dialerURL)
}

答案 12 :(得分:-1)

Swift 4.2中的相同答案

func dialNumber(number : String) {

 if let url = URL(string: "tel://\(number)"),
   UIApplication.shared.canOpenURL(url) {
      if #available(iOS 10, *) {
        UIApplication.shared.open(url, options: [:], completionHandler:nil)
       } else {
           UIApplication.shared.openURL(url)
       }
   } else {
            // add error message here 
   }
}

像下面这样叫

dialNumber(number: "+921111111222")