我可以使用以下内容在我的应用中成功发起电话:
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"tel://123456789"]];
但是,一旦电话通话终止,是否可以自动返回应用程序?看来这在iPhone OS 3.0下是不可能的,但我希望现在可以在iOS 4.2下进行多任务处理(我无法找到有关iOS 4.2特定问题的任何信息)。
提前感谢您的任何帮助!
答案 0 :(得分:121)
我知道这个问题已经过时了,但是目前你可以使用telprompt://来实现这一点(至少在iOS 5上),如:
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"telprompt://123456789"]];
iPhone会显示提醒视图确认,当通话结束时,您的应用会再次显示,而不是iPhone的通话应用。
答案 1 :(得分:7)
据我所知,因为控制权传递给phone.app进行通话,一旦通话结束,就iOS而言,phone.app是当前应用程序,因此保持在前台。
目前似乎没有什么可以做的。可能值得提出功能请求以允许类似于MFMessageComposer
的“模态电话”,允许您在自己的应用中发送电子邮件/短信。
修改强>
您可以按照Frin中answer below提供的建议,因为其中包含更多最新信息。
答案 2 :(得分:6)
我认为问题在于您仍然在进行sharedApplication调用,而根据其他线程,您无需将Web视图添加为层次结构的一部分。
我拿了你的代码,修改如下,它运行得很好:
NSString *phoneStr = [NSString stringWithFormat:@"tel:%@", phoneNumber];
NSURL *phoneURL = [[NSURL alloc] initWithString:phoneStr];
// The WebView needs to be retained otherwise it won't work.
if (!mCallWebview)
mCallWebview = [[UIWebView alloc] init];
[mCallWebview loadRequest:[NSURLRequest requestWithURL:phoneURL]];
在通话结束后,您自己的应用就像以前一样运行。
答案 3 :(得分:3)
自iOS 4.0推出以来,这是最终可能的。处理此问题的最佳方法是使用UIWebView,在WebView中加载“tel:0123456”URL,而不将其添加到视图层次结构中。 iOS将自动显示带有电话号码的提醒,并通过按“呼叫”要求用户确认。
呼叫完成后,您的应用将自动返回前台。这在另一个帖子中有详细说明:Return to app behavior after phone call different in native code than UIWebView
答案 4 :(得分:2)
我在iPhone SDK: Launching an app after call ends给出了这个答案我也会在这里发布我的代码..在这里你可以打电话而不关闭你的app ..
-(IBAction) dialNumber:(id)sender{
NSString *aPhoneNo = [@"tel://" stringByAppendingString:[itsPhoneNoArray objectAtIndex:[sender tag]]] ; NSURL *url= [NSURL URLWithString:aPhoneNo];
NSURL *url= [NSURL URLWithString:aPhoneNo];
NSString *osVersion = [[UIDevice currentDevice] systemVersion];
if ([osVersion floatValue] >= 3.1) {
UIWebView *webview = [[UIWebView alloc] initWithFrame:[UIScreen mainScreen].applicationFrame];
[webview loadRequest:[NSURLRequest requestWithURL:url]];
webview.hidden = YES;
// Assume we are in a view controller and have access to self.view
[self.view addSubview:webview];
[webview release];
} else {
// On 3.0 and below, dial as usual
[[UIApplication sharedApplication] openURL: url];
}
}
答案 5 :(得分:0)
使用iOS 9.3.4,我尝试的每种技术都可以在电话呼叫后返回到主叫应用程序。这种行为最近有变化吗?这个例子只是https://github.com/jatraiz/RZTelpromptExample的Swift和简化版本:
class ViewController: UIViewController {
let phoneNumber = "7204790465"
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
@IBAction func callWithTelPushed(sender: AnyObject) {
if let url = NSURL(string: "tel:" + self.phoneNumber) {
UIApplication.sharedApplication().openURL(url)
}
}
@IBAction func callWithTelpromptPushed(sender: AnyObject) {
if let url = NSURL(string: "telprompt:" + self.phoneNumber) {
UIApplication.sharedApplication().openURL(url)
}
}
@IBAction func callWithRZTelpromptPushed(sender: AnyObject) {
RZTelprompt.callWithString(self.phoneNumber)
}
}