2009-11-03 82 views
0

我有一個在iphone 2.2.1版本中工作得很好的應用程序,但當我將我的開發iphone升級到3.1.2時遇到了問題。之前,撥打號碼的工作正常,因爲通話結束時,我的應用程序已加載。現在,在我結束通話後,它會加載默認的電話應用程序。有人知道這是爲什麼嗎?我已經從sdk 2.x到3.x看了diff,並且找不到任何理由改變它。謝謝使用電話:網址發起呼叫不會返回控制

回答

4

這的確從3.0改爲3.1。如果您需要「即時通話」和「重新啓動應用程序」,則有兩種解決方法:

選項1:創建一個UIWebView並加載您的tel:URL。

// assuming you have an ivar to store a weak reference to a UIWebView: 
// UIWebView *phoneCallWebView; 

- (void) dialPhoneNumber:(NSString *)aPhoneNumber 
{ 
    NSURL *phoneURL = [NSURL URLWithString:[NSString stringWithFormat:@"tel:%@",aPhoneNumber]]; 

    if (!phoneCallWebView) {   
     phoneCallWebView = [[UIWebView alloc] initWithFrame:CGRectZero]; 
    } 
    [phoneCallWebView loadRequest:[NSURLRequest requestWithURL:phoneURL]]; 
} 

- (void) dealloc 
{ 
    // cleanup 
    [phoneCallWebView release], phoneCallWebView = nil; 
    [super dealloc]; 
} 

選項2:用與telprompt:<number> URL方案,而不是tel:<number>撥打您的電話。請注意,這是一個未記錄的API功能,但它是UIWebView在Web瀏覽器(或MobileSafari中)中點擊電話號碼鏈接時使用的功能。如果你的目標是iPhone> = 3.0,使用telprompt沒有任何問題:(tel:和telprompt:在3.0上是相同的)。我不確定iPhone OS 2.x.

一般而言,選項2的工作原理更簡單,但選項1實際上是一種「合法的」解決方法。不幸的是,似乎沒有辦法將「即時呼叫」和「呼叫後重新啓動」行爲分開。在iPhoneOS> = 3.1上,您既可以同時使用,也可以不使用。

1

是的,蘋果改變了這種行爲從3.0到3.1(我相信,也可以從2.x到3.0)。他們已經承認這種變化是故意的,而不是一個錯誤。沒有我知道的解決方法。如果您認爲舊的行爲應該再次可用,您只需要爲它提供文件增強請求。

+0

這就是我在檢查幾個論壇後想的,但只是想確認一下。謝謝! – 2009-11-05 15:41:12

+0

我剛剛提交了一個增強請求,如果我從他們那裏聽到任何信息,我會跟進。 – 2009-11-05 17:16:51

1

但是UIWebView和telepump都會引入一個「彈出框」,要求用戶確認用戶是否想撥打該號碼。我想知道是否有一些解決方案可以擺脫「彈出框」謝謝。

0
NSURL* url = [[NSURL alloc] initWithString:[NSString stringWithFormat:@"telprompt:%@",[SLUser sharedInstance].ivrNumber]]; 
[[UIApplication sharedApplication] openURL:url];