如何快速拨打电话

时间:2015-05-14 14:40:11

标签: swift

首先我知道有一些类似的主题,但由于我的声誉,我无法评论那些寻求帮助和堆栈溢出警告我不要从答案部分寻求帮助..没有类似的帖子已经回答了我的问题所以我去了。

从主题可以理解,我想点击一下打个电话, 我为我的公司制作了一个应用程序,我想要设置一个通话按钮,以便人们可以通过应用程序给我打电话。

以下是我从类似主题中尝试过的尝试:

    let phoneNumber = "1234567890"

    if let phoneCallURL = NSURL(string: "tel:\(phoneNumber)") {
        let application = UIApplication.sharedApplication()
        if application.canOpenURL(phoneCallURL) {
            application.openURL(phoneCallURL)
        }
        else{
            println("failed")
        }
    }

所以当我用电话号码运行上面的代码时,它会在控制台上输出失败的消息,好像我无法打开URL

我尝试的其他代码非常相似

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

另一个问题是:NSURL的正确语法是什么?

这个

NSURL(string: "tel://\(phoneNumber)") 

或者

NSURL(string: "tel//:\(phoneNumber)")

我的最后一个问题是:如果应用程序设法拨打电话,它是否会像通话屏幕一样出现在模拟器上?我对快速编程非常陌生,如果问题看起来很愚蠢我会道歉..

6 个答案:

答案 0 :(得分:3)

tel:网址的简单格式为tel:######/不是数字。你可能意味着:

NSURL(string: "tel:\(phoneNumber)") 

假设phoneNumber是包含电话号码的字符串。

tel:方案在RFC2806中定义。您可以在那里查看有关其所有预期功能的详细信息。

请注意,在模拟器中无法拨打电话,因此如果您尝试在那里打开tel:网址,则会收到错误(除非您通过注册NSURLProtocol来自行处理网址)

答案 1 :(得分:1)

您的代码看起来是正确的。如果您在模拟器中测试它似乎总是会失败。 尝试使用你的iPhone来运行它,它会根据你的需要进入拨号器界面。

答案 2 :(得分:1)

let phoneNumber = "0507712323"
if let callNumber = phoneNumber {

let aURL = NSURL(string: "telprompt://\(callNumber)")
    if UIApplication.sharedApplication().canOpenURL(aURL) {
        UIApplication.sharedApplication().openURL(aURL)
    } else {
        print("error")
    }
 }
else {
   print("error")}

答案 3 :(得分:1)

我出于不同的原因出现此问题,我想与您分享。

首先不要在模拟器中尝试必须尝试使用​​真实设备

第二次确保传递的数字不包含空格

这里是示例

private func callNumber(phoneNumber:String) {
        // I add this line to make sure passed number wihthout space 
        let CleanphoneNumber = phoneNumber.stringByReplacingOccurrencesOfString(" ", withString: "")
        if let phoneCallURL:NSURL = NSURL(string: "tel://\(CleanphoneNumber)") {
            let application:UIApplication = UIApplication.sharedApplication()
            if (application.canOpenURL(phoneCallURL)) {
                application.openURL(phoneCallURL);
            }
        }
    }

答案 4 :(得分:1)

如果您想在通话结束后返回应用程序(您应该这样做),那么您需要使用“telprompt://”而不是“tel://”。通话结束后,“tel://”将带您进入主屏幕。更好地利用这个:

var url:NSURL = NSURL(string: "telprompt://1234567891")!
UIApplication.sharedApplication().openURL(url)

答案 5 :(得分:0)

我在代码

中添加了一些额外的验证
func makeCall(constactNumber : NSString)
{
    if(constactNumber.length == 0)
    {
        print("Contact number in not valid")
    }
    else
    {
        let CleanconstactNumber = constactNumber.stringByReplacingOccurrencesOfString(" ", withString: "")
        if let phoneCallURL:NSURL = NSURL(string: "tel://\(CleanconstactNumber)")
        {
            if (UIDevice.currentDevice().model.rangeOfString("iPad") != nil)
            {
                print("Your device doesn't support this feature.")

            } else
            {
                let application:UIApplication = UIApplication.sharedApplication()
                if (application.canOpenURL(phoneCallURL))
                {
                    let mobileNetworkCode = CTTelephonyNetworkInfo().subscriberCellularProvider?.mobileNetworkCode
                    if( mobileNetworkCode == nil)
                    {
                        print(" No sim present Or No cellular coverage or phone is on airplane mode.")
                    }
                    else
                    {
                        application.openURL(phoneCallURL);
                    }
                }
            }
        }
    }
}