2011-03-28 89 views
45

如何在iOS中拨打包含编号和访问代码的电话号码?以编程方式拨打带有访问代码的电话号码

例如:

号码:900-3440-567
接入代码:65445

+0

可能重复的[编程式拨打电话号码和使用iPhone SDK传递DTMF](http://stackoverflow.com/questions/584663/programatically-dial-a-phone-number-and-pass-dtmf-using -the-iphone-sdk) – Senseful 2015-06-19 21:46:24

回答

2

您可以使用手机的URL来调用电话应用程序拨打号码给你。请参阅reference

缺点是一旦通话完成,用户将在电话应用程序中结束。但是恐怕没有解决这个问题的办法。由于安全和隐私原因,iOS不允许任何应用程序直接发起呼叫。

您可以使用逗号在拨打号码时引入暂停(s)。

+0

谢谢但他们有很多应用程序在iOS中做这个 – 2011-03-28 13:08:27

+1

@Shahid:那么为什么所有的答案只能指向电话URL? – Hemant 2011-03-29 04:19:22

+0

人们的选择啊!不用担心 – 2011-03-29 08:00:37

34

按照教程

http://www.makebetterthings.com/blogs/iphone/open-phone-sms-email-map-and-browser-apps-in-iphone-sdk/

要拨打电话使用 -

NSURL *url = [NSURL URLWithString:@"tel://012-4325-234"]; 
[[UIApplication sharedApplication] openURL:url]; 

开启应用程式后,通话结束后使用 -

(注:telprompt是无证)

NSURL *url = [NSURL URLWithString:@"telprompt://012-4325-234"]; 
[[UIApplication sharedApplication] openURL:url]; 
+0

网址无效 – 2012-01-20 05:28:05

+3

如何拨打接入码? – 2012-07-09 07:26:33

+1

不是telprompt://是否会被Apple拒绝的私有方法? – 2012-07-24 01:46:55

19

您可以使用UIApplicationopenURL:方法以编程方式拨打电话号码(请参阅下面的示例)。我不确定访问代码是否受支持,但这至少是一个起点。

NSURL *URL = [NSURL URLWithString:@"tel://900-3440-567"]; 
[[UIApplication sharedApplication] openURL:URL]; 

编辑:Apple URL Scheme ReferenceUIApplication Class Reference以获取更多信息。

+0

是posssible与//? – Hiren 2012-01-19 06:14:11

+0

您应该检查设备是否能够处理的URL方案,请参阅'[UIApplication的sharedApplication] canOpenURL:...]'。 – Zorayr 2015-04-25 18:47:56

107
UIDevice *device = [UIDevice currentDevice]; 
if ([[device model] isEqualToString:@"iPhone"]) { 
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:[NSString stringWithFormat:@"tel:130-032-2837"]]]; 
} else { 
    UIAlertView *notPermitted=[[UIAlertView alloc] initWithTitle:@"Alert" message:@"Your device doesn't support this feature." delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
    [notPermitted show]; 
    [notPermitted release]; 
} 
+4

感谢球员发布代码真的有帮助,但访问代码如何自动拨打会议? – 2011-03-28 13:14:48

+7

您应该使用canOpenURL而不是设备模型。请记住,iPad和iPod touch可以拨打FaceTime号码。 http://blog.mugunthkumar.com/coding/iphone-tutorial-better-way-to-check-capabilities-of-ios-devices/ – Mugunth 2012-09-18 01:58:48

+5

真的十分感谢。如果您使用小写命名UIAlertView实例的话,会更加出色 – 2013-02-14 17:41:11

2

这是不可能以编程方式拨打该号码包括与接入码的电话号码。

苹果开发人员库提供了以下信息:

” ......电话应用程序支持大多数,但不是所有的电话方案的特殊字符,特别是,如果一个URL包含*或#字符,电话应用程序不会尝试拨打相应的电话号码。“

参见:Apple URL Scheme Reference

+0

你确定这是不可能的,并确定苹果拒绝? – 2013-05-29 09:03:22

+0

如果URL中包含'*'或''#它不工作 – 2013-06-04 11:28:55

+0

除此之外情况下做它的工作原理? – 2013-06-04 11:32:32

7

我不知道,如果你真的找到了一个解决方案通过接入码,但对我这个代码工作:

NSString *dialstring = [[NSString alloc] initWithFormat:@"tel:your_phonenumber,your_accessnumber"]; 

这将导致拨号串用以下值:

tel:9003440567,65445

其余部分由的iOS使用下面的命令的电话应用管理

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:dialstring]]; 

字符串中的,在拨打第一个号码并建立连接后,会在您的电话系统(您想要访问会议室的那个)中暂停。因此,电话系统有时间询问您的访问代码(我认为它应该问你,这是我们的系统工作方式)。之后,您的访问代码应通过。

BE AWARE:您的访问代码将以非秘密方式传入。例如:您的显示访问代码会被这种方式显示在iPhone手机应用程序显示:9003440567,65445

+0

dialstring必须使用“{”和“}” - >方法[[UIApplication sharedApplication] openURL:[NSURL URLWithString:dialstring]];而不是检查,如果设备是iPhone ...]':不叫 – vualoaithu 2013-12-23 09:10:06

3

使用此用户可以呼叫重定向,呼叫后,他/她将自动重定向到该应用程序。它为我工作,并确信它。

if ([[device model] isEqualToString:@"iPhone"]) { 

    NSString *phoneNumber = [@"telprompt://" stringByAppendingString:cellNameStr]; 
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:phoneNumber]]; 

} else { 

    UIAlertView *warning =[[UIAlertView alloc] initWithTitle:@"Alert" message:@"Your device doesn't support this feature." delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; 

    [warning show]; 
} 
+0

由于其做工精细 – nivritgupta 2014-07-28 18:51:55

+0

应该使用'[UIApplication的sharedApplication] canOpenURL。 – Zorayr 2015-04-25 18:47:17

1

有许多的方式来拨打电话号码和使用说明的方式:

[UIApplication的sharedApplication]的OpenURL:[NSURL URLWithString:@ “电话:555-555-5555” ]

是一个有效的方法来做到这一点,但它有一些问题。首先,它不会正确提示用户,其次在电话完成时它不会将用户带回应用程序。要正确地拨打电话,您应该在通话之前提示您,以免让用户感到意外,并且一旦通话完成,您应该将用户带回应用程序。

这些都可以在不使用私有API的情况下完成,正如这里的一些答案所建议的。推荐的方法使用telprompt api,但不使用调用的私有实例,而是创建一个允许未来兼容性的Web视图。

+ (void)callWithString:(NSString *)phoneString 
{ 
    [self callWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"tel:%@",phoneString]]]; 
} 
+ (void)callWithURL:(NSURL *)url 
{ 
    static UIWebView *webView = nil; 
    static dispatch_once_t onceToken; 
    dispatch_once(&onceToken, ^{ 
     webView = [UIWebView new]; 
    }); 
    [webView loadRequest:[NSURLRequest requestWithURL:url]]; 
} 

样本项目和其他信息在这里提供: http://www.raizlabs.com/dev/2014/04/getting-the-best-behavior-from-phone-call-requests-using-tel-in-an-ios-app/

+0

请注意原始问题,询问如何拨打号码以及接入码。访问代码可以通过使用暂停序列以及访问代码来拨打。暂停使用“555-1212,65455”完成。请注意,每个逗号通常代表大约两秒的暂停。 – graiz 2014-04-08 03:48:06

+0

URL字符串应以“tel://”开头。虽然在示例中传递的参数phoneString可能以“//”开头,但我怀疑事实并非如此 – 2014-08-10 13:37:45

3

这里是斯威夫特一个独立的解决方案:

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")拨打电话;希望这可以帮助!

相关问题