2011-03-28 92 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")撥打電話;希望這可以幫助!

相關問題