【发布时间】:2009-11-03 17:58:11
【问题描述】:
我有一个应用程序在 iphone 的 2.2.1 版中运行良好,但是当我将我的开发版 iphone 升级到 3.1.2 时遇到了问题。以前,拨打一个号码可以正常工作,因为通话结束时,我的应用程序已加载。现在,在我打完电话后,它会加载默认的电话应用程序。有谁知道这是为什么?我查看了从 sdk 2.x 到 3.x 的差异,但找不到任何改变的原因。谢谢
【问题讨论】:
标签: iphone iphone-sdk-3.0
我有一个应用程序在 iphone 的 2.2.1 版中运行良好,但是当我将我的开发版 iphone 升级到 3.1.2 时遇到了问题。以前,拨打一个号码可以正常工作,因为通话结束时,我的应用程序已加载。现在,在我打完电话后,它会加载默认的电话应用程序。有谁知道这是为什么?我查看了从 sdk 2.x 到 3.x 的差异,但找不到任何改变的原因。谢谢
【问题讨论】:
标签: iphone iphone-sdk-3.0
这确实是从 3.0 更改为 3.1。如果您需要“prompt-for-call”和“relaunch-app-after-call”,有两种解决方法:
选项 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 上,您可以同时获取,也可以不获取。
【讨论】:
是的,Apple 将此行为从 3.0 更改为 3.1(我相信,也可能从 2.x 更改为 3.0)。他们承认这个改变是故意的,而不是一个错误。没有我知道的解决方法。如果您认为旧行为应该再次可用,您只需接受它提交增强请求即可。
【讨论】:
但是 UIWebView 和 telepump 都会引入一个“弹出框”,要求用户确认用户是否要拨打该号码。我想知道是否有一些解决方案可以摆脱“弹出框”谢谢。
【讨论】:
NSURL* url = [[NSURL alloc] initWithString:[NSString stringWithFormat:@"telprompt:%@",[SLUser sharedInstance].ivrNumber]];
[[UIApplication sharedApplication] openURL:url];
【讨论】: