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)
}
}