iOS 4.2 - возврат в приложение после телефонного звонка

Я могу успешно инициировать телефонный звонок в моем приложении, используя следующее:

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

Однако можно ли автоматически вернуться в приложение после завершения телефонного звонка? Кажется, это было невозможно в iPhone OS 3.0, но я надеюсь, что теперь это возможно в iOS 4.2 с многозадачностью (я не смог найти никакой информации по этому вопросу, относящейся к iOS 4.2).

Спасибо заранее за любую помощь!

6 ответов

Решение

Насколько я знаю, потому что управление передается в phone.app для выполнения вызова после завершения вызова, поскольку это касается iOS, phone.app является текущим приложением, поэтому оно остается на переднем плане.

Кажется, в данный момент вы ничего не можете с этим поделать. Возможно, стоит добавить запрос функции для "модального телефонного звонка", аналогичного MFMessageComposer это позволяет вам отправлять электронные письма / смс в вашем собственном приложении.

РЕДАКТИРОВАТЬ

Вы можете следовать совету, который frin дает в ответе ниже, поскольку он содержит более актуальную информацию.

Я знаю, что вопрос очень старый, но в настоящее время вы можете сделать это (по крайней мере, на iOS 5), используя telprompt://, например:

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

iPhone отобразит подтверждение просмотра предупреждений, и после завершения вызова ваше приложение отобразится снова, а не приложение для вызовов iPhone.

Я полагаю, что проблема заключается в том, что вы все еще делаете вызов sharedApplication, и, согласно другому потоку, нет необходимости добавлять веб-представление как часть вашей иерархии.

Я взял ваш код, изменил его, как показано ниже, и он работает просто отлично:

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]]; 

После звонка ваше собственное приложение работает, как и раньше.

Это окончательно возможно с момента появления iOS 4.0. Лучший способ справиться с этим - использовать UIWebView, загрузить URL-адрес "tel:0123456" в WebView, не добавляя его в иерархию представлений. IOS автоматически отобразит предупреждение с номером телефона и попросит пользователя подтвердить, нажав "Позвонить".

После завершения вызова ваше приложение автоматически вернется на передний план. Это подробно описано в этом другом потоке: Возврат к поведению приложения после телефонного звонка, отличного по собственному коду от UIWebView

Я дал этот ответ в iPhone SDK: Запуская приложение после завершения вызова, я также опубликую свой код здесь... здесь вы можете позвонить, не закрывая приложение.

-(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];
}


}

В iOS 9.3.4 у каждой пробной техники есть контроль возврата к вызывающему приложению после телефонного звонка. Изменилось ли это поведение в последнее время? Этот пример является просто Swift и упрощенной версией https://github.com/jatraiz/RZTelpromptExample:

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)
    }
}
Другие вопросы по тегам