iPhone SDK:Запуск приложения после завершения вызова
-
22-09-2019 - |
Вопрос
Как мне совершить звонок из приложения или запустить приложение сразу после завершения вызова?Я знаю, что это возможно, потому что некоторые приложения в app Store уже делают это.
Решение
Я получил этот код с сайта Apple, и он отлично работает:
-(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];
}
}
Другие советы
Я думаю, что в этом есть две части
- Приложение уже запущено, и пользователь получает приглашение, указывающее на поступление телефонного звонка, и просит принять или отклонить
- Пользователь получает телефонный звонок, но приложение не запущено
В первом случае ваш UIApplicationDelegate Пользовательское приложение будет получать сообщения application:willChangeStatusBarFrame:
, application:didChangeStatusBarFrame:
, applicationWillResignActive:
, и applicationDidBecomeActive:
все потенциально несколько раз, все зависит от того, решит ли пользователь ответить на вызов или нет, и, возможно applicationWillTerminate:
если они решат оставить вашу заявку или нет.Вы также можете наблюдать за этими событиями с помощью Центр идентификации NSNotificationCenter из класса, который не зарегистрирован в качестве делегата приложения, смотрите Раздел "Уведомления" в Пользовательское приложение ссылка на класс для получения подробной информации.
Во втором случае я не знаю, есть ли официальный SDK для запуска вашего приложения по окончании телефонного звонка.Не могли бы вы предоставить список приложений, которые это делают?
Редактировать:
Думаю, теперь я понимаю, что вы имеете в виду.Вам следует последовать совету от @jessecurry, openURL
на UIApplication
с помощью tel:
протокол сделает телефонный звонок.Что касается их заявления о том, что они "делают невозможное" и не выходят из приложения при телефонном звонке, я не уверен, как они это сделали, потому что я этого не писал.Они могли бы использовать внешнюю службу VOIP, такую как Skype, или просто загружать tel:
URL-адрес внутри невидимой веб-таблицы.Ни то, ни другое я не могу прокомментировать, потому что я этого не пробовал.
Это делается с помощью telprompt вместо tel.пожалуйста, посмотрите на следующий код
[[UIApplication sharedApplication] openURL:[URL-адрес NSURL со строкой:@"telprompt:18004912200"]];
если вы хотите совершить звонок из своего приложения, вы можете использовать tel:
url-адрес.
Вот метод, который принимает телефонный номер в виде строки и инициирует вызов.
- (void)dialNumber: (NSString*)telNumber
{
// fix telNumber NSString
NSArray* telComponents = [telNumber componentsSeparatedByCharactersInSet: [NSCharacterSet whitespaceAndNewlineCharacterSet]];
telNumber = [telComponents componentsJoinedByString: @""];
NSString* urlString = [NSString stringWithFormat: @"tel:%@", telNumber];
NSURL* telURL = [NSURL URLWithString: urlString];
//NSLog( @"Attempting to dial %@ with urlString: %@ and URL: %@", telNumber, urlString, telURL );
if ( [[UIApplication sharedApplication] canOpenURL: telURL] )
{
[[UIApplication sharedApplication] openURL: telURL];
}
else
{
UIAlertView* alert = [[UIAlertView alloc] initWithTitle: NSLocalizedString( @"Dialer Error", @"" )
message: [NSString stringWithFormat: NSLocalizedString( @"There was a problem dialing %@.", @"" ), telNumber]
delegate: nil
cancelButtonTitle: NSLocalizedString( @"OK", @"" )
otherButtonTitles: nil];
[alert show];
[alert release];
}
}