Подтвердить что ты не робот

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

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

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

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

Заранее благодарим за помощь!

4b9b3361

Ответ 1

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

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

ИЗМЕНИТЬ

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

Ответ 2

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

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

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

Ответ 3

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

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

Ответ 4

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

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

Ответ 5

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


}

Ответ 6

С iOS 9.3.4 каждый метод, который я пытаюсь получить, управляет возвратом в вызывающее приложение после телефонного звонка. В последнее время изменилось это поведение? Этот пример является просто быстрой и упрощенной версией 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)
    }
}