iOS 4.2 - 通过电话后返回应用程序

时间:2011-02-17 11:28:42

标签: iphone ios

我可以使用以下内容在我的应用中成功发起电话:

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"tel://123456789"]];

但是,一旦电话通话终止,是否可以自动返回应用程序?看来这在iPhone OS 3.0下是不可能的,但我希望现在可以在iOS 4.2下进行多任务处理(我无法找到有关iOS 4.2特定问题的任何信息)。

提前感谢您的任何帮助!

6 个答案:

答案 0 :(得分:121)

我知道这个问题已经过时了,但是目前你可以使用telprompt://来实现这一点(至少在iOS 5上),如:

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"telprompt://123456789"]];

iPhone会显示提醒视图确认,当通话结束时,您的应用会再次显示,而不是iPhone的通话应用。

答案 1 :(得分:7)

据我所知,因为控制权传递给phone.app进行通话,一旦通话结束,就iOS而言,phone.app是当前应用程序,因此保持在前台。

目前似乎没有什么可以做的。可能值得提出功能请求以允许类似于MFMessageComposer的“模态电话”,允许您在自己的应用中发送电子邮件/短信。

修改

您可以按照Frinanswer 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)
    }
}