使用tel:url发起呼叫不会返回控制权

时间:2009-11-03 17:58:12

标签: iphone iphone-sdk-3.0

我有一个应用程序在iphone的2.2.1版本中工作得很好,但是当我将我的开发iphone升级到3.1.2时遇到了问题。之前,拨打号码工作正常,如同通话结束时,我的应用程序已加载。现在,在我点击结束通话后,它会加载默认的电话应用程序。有谁知道这是为什么?我已经看过从sdk 2.x到3.x的差异,并且找不到任何原因会改变它。感谢

4 个答案:

答案 0 :(得分: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>网址方案而不是tel:<number>发起呼叫。请注意,这是一个未记录的API功能,但它是当您点击webview(或MobileSafari)中的电话号码链接时UIWebView使用的功能。如果你的目标是iPhone&gt; = 3.0,使用telprompt没有任何问题:(tel:和telprompt:在3.0上是相同的)。我不确定iPhone OS 2.x。

通常,选项2有效且更容易,但选项1实际上是一种“合法”的解决方法。不幸的是,似乎没有办法将“提示呼叫”和“重新启动 - 呼叫”行为分开。在iPhoneOS&gt; = 3.1上,您可以同时获得两者,也可以两者都不。

答案 1 :(得分:1)

是的,Apple将此行为从3.0改为3.1(我相信,也可能是从2.x到3.0)。他们承认这种改变是故意的而不是错误。我知道没有解决方法。如果您认为旧的行为应该再次可用,您只需要使用文件和增强请求。

答案 2 :(得分:1)

但UIWebView和telepump都会引入一个“弹出框”,要求用户确认用户是否愿意拨打这个号码。我想知道是否有一些解决方案可以摆脱“弹出框”谢谢。

答案 3 :(得分:0)

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