iOS 4.2 - возврат в приложение после телефонного звонка - PullRequest
33 голосов
/ 17 февраля 2011

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

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

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

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

Ответы [ 6 ]

121 голосов
/ 17 мая 2012

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

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

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

7 голосов
/ 17 февраля 2011

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

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

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

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

6 голосов
/ 07 апреля 2012

Я полагаю, что проблема в том, что вы все еще делаете вызов 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]]; 

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

3 голосов
/ 29 ноября 2011

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

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

2 голосов
/ 16 июня 2012

Я дал этот ответ в 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];
}


}
0 голосов
/ 23 сентября 2016

В 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)
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...