IOS 4.2 - Возврат в приложение после телефонного звонка
Я могу успешно инициировать телефонный звонок в своем приложении, используя следующее:
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"tel://123456789"]];
Однако можно ли автоматически вернуться к приложению после того, как телефонный звонок был прерван? Кажется, это невозможно в iPhone OS 3.0, но я надеюсь, что теперь это возможно в iOS 4.2 с многозадачностью (я не смог найти какую-либо информацию по этому вопросу, относящуюся к iOS 4.2).
Заранее благодарим за помощь!
Ответы
Ответ 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)
}
}