iPhone SDK: запуск приложения после завершения вызова
Как мне сделать звонок из приложения или запустить приложение сразу после его завершения? Я знаю, что это возможно, потому что некоторые приложения в магазине приложений уже делают это.
4 ответа
Я получил этот код с сайта 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 из класса, который не зарегистрирован в качестве делегата приложения, см. Подробности в разделе "Уведомления" справочника по классу UIApplication.
Во втором случае я не знаю, есть ли официальный SDK для запуска вашего приложения после завершения телефонного звонка. Не могли бы вы предоставить список приложений, которые делают это?
РЕДАКТИРОВАТЬ:
Я думаю, я понимаю, что вы имеете в виду сейчас. Вы должны следовать совету @jessecurry, openURL
на UIApplication
с tel:
Протокол сделает телефонный звонок. Что касается их заявления "делать невозможное" и не выходить из приложения, когда сделан телефонный звонок, я не уверен, как они это сделали, потому что я его не написал. Они могут использовать внешний сервис VOIP, такой как Skype, или просто загрузить tel:
URL внутри невидимой веб-страницы. Ни один из которых я не могу комментировать, потому что я не пробовал это.
Это делается с помощью telprompt вместо tel. пожалуйста, посмотрите на следующий код
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"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];
}
}