2010-02-22 74 views
2

如何在應用程序內撥打電話或在通話結束後立即啓動應用程序?我知道這是可能的,因爲應用程序商店中的一些應用程序已經在執行此操作。iPhone SDK:在通話結束後啓動應用程序

+0

使用webview進行調用。它在這個問題中正確解釋:http://stackoverflow.com/questions/5317783/return-to-app-behavior-after-phone-call-different-in-native-code-than-uiwebview – 2011-09-26 08:27:47

回答

6

我從蘋果網站上的這個代碼,它完美的作品:

-(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

如果您想在應用內撥打電話,您可以使用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無法啓動您的應用程序。你能提供一個這樣做的應用程序的列表嗎?

編輯:

我想我明白你的意思了。您應該遵循@jessecurry的建議,UIApplication上的openURLtel:協議將撥打電話。至於他們聲稱「做不可能」並且在打電話時不退出應用程序,我不確定他們是如何做的,因爲我沒有寫。他們可能會使用Skype等外部VOIP服務,或者只是在不可見的Web表格中加載tel:網址。由於我沒有嘗試過,所以我都不能評論。

+0

這裏有幾個應用程序正在做它 1.嬰兒監視器和鬧鐘(http://www.isarson.com/en/baby-monitor-alarm-iphone)。他們最近的一條推文 - 「現在有無限數量的鬧鐘的嬰兒監視器和鬧鐘。是的,我們做的不可能,我們的應用程序沒有退出,當打電話時!」 - 4周22小時前「 2.喚醒呼叫報警 – Mithin 2010-02-23 10:04:37

+0

請記住,如果你使用'openURL',用3.x +,用戶現在會得到一個提示。在2.x它只會撥號 – slf 2010-02-23 21:21:22

1

它是通過使用電話的telprompt代替完成。請看以下代碼

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

相關問題