2010-02-22 5 views
2

Как мне позвонить из приложения или запустить приложение сразу же после завершения вызова? Я знаю, что это возможно, потому что некоторые приложения в магазине приложений уже делают это.iPhone SDK: запуск приложения после завершения вызова

+0

Используйте веб-просмотр, чтобы позвонить. Его правильно объяснили в этом вопросе: http://stackoverflow.com/questions/5317783/return-to-app-behavior-after-phone-call-different-in-native-code-than-uiwebview –

ответ

6

Я получил этот код с сайта 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]; 
} 


} 
0

Если вы хотите позвонить из своего приложения, вы можете использовать URL-адрес tel:.

Вот метод, который принимает номер телефона в виде строки и инициирует вызов.

- (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]; 
    } 
} 
3

Я думаю, что есть две части этой

  1. Программа уже работает, и пользователь получает приглашение, указывающее на телефонный звонок приходит в, и попросил принять или отклонить
  2. пользователь получает телефонный звонок, но приложение не работает

В первом случае ваш UIApplicationDelegate будет получать сообщения application:willChangeStatusBarFrame:, application:didChangeStatusBarFrame:, applicationWillResignActive: и applicationDidBecomeActive: все потенциально несколько раз в зависимости от того, выбирает ли пользователь ответ на вызов или нет, и, возможно, applicationWillTerminate:, если они захотят оставить заявку или нет. Вы также можете наблюдать за этими событиями, используя NSNotificationCenter из класса, который не зарегистрирован в качестве делегата приложения, подробности см. В разделе «Уведомления» в описании класса UIApplication.

Во втором случае я не знаю, что с официальным SDK вы можете запустить приложение, когда телефонный звонок заканчивается. Не могли бы вы предоставить список приложений, которые это делают?

EDIT:

Я думаю, я понимаю, что вы имеете в виду прямо сейчас. Вы должны следовать совету @jessecurry, openURL на UIApplication с протоколом tel: позвонит. Что касается их претензий на «делать невозможное» и не покидать приложение, когда был сделан телефонный звонок, я не уверен, как они это сделали, потому что я его не писал. Они могут использовать внешний сервис VOIP, например Skype, или просто загружать URL-адрес tel: в невидимый веб-лист. Ни один из которых я не могу прокомментировать, потому что я не пробовал.

+0

Вот несколько приложений которые делают это 1. Baby Monitor & Alarm (http://www.isarson.com/ru/baby-monitor-alarm-iphone). Один из последних твитов - «Baby Monitor & Alarm» теперь с неограниченным количеством аварийных сигналов. Да, мы сделали невозможное, наше приложение не вышло, когда телефонный звонок выполняется! - 4 недели 22 часа назад » 2. Сигнал вызова Wakeup Call – Mithin

+0

Помните, что с 3.x +, если вы используете 'openURL', пользователи получат подсказку. В 2.x он просто набирает – slf

1

Это делается с помощью telprompt вместо тел. пожалуйста, ознакомьтесь со следующим кодом:

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

Смежные вопросы