2014-02-26 21 views
2

有電話號碼,用戶可以點擊其中一個來打電話。當通話成功連接時,應用程序應發送一個JSON到我的服務器。檢測在後臺發送JSON的電話開始

我遇到了問題 - 一旦電話號碼被點擊,Phone應用程序彈出,我的應用程序被髮送到後臺。我讀過的CoreTelephony Framework文檔和CTCall類的引用,但我不知道這四種狀態:

extern NSString const *CTCallStateDialing; 
extern NSString const *CTCallStateIncoming; 
extern NSString const *CTCallStateConnected; 
extern NSString const *CTCallStateDisconnected; 

他們是在後臺檢查或在Phone應用程序正在運行。如何檢測它?

我應該使用applicationDidEnterBackground方法和CTCall類在它火JSON

回答

3

你應該去CTCallCenter和實施callEventHandler將被呼叫狀態變化時觸發。這是如何做到這一點。

首先,你需要一個CTCallCenter實例:

@property(nonatomic, strong) CTCallCenter *callCenter; 

然後,設置一個callEventHandler當你的應用程序啓動。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
     _callCenter = [[CTCallCenter alloc] init]; 

     [_callCenter setCallEventHandler:^(CTCall *call) 
     {    
      if ([call.callState isEqualToString: CTCallStateConnected]) 
      { 
       NSLog(@"Connected"); 
      } 
      else if ([call.callState isEqualToString: CTCallStateDialing]) 
      { 
       NSLog(@"Dialing"); 
      } 
      else if ([call.callState isEqualToString: CTCallStateDisconnected]) 
      { 
       NSLog(@"Disconnected"); 

      } else if ([call.callState isEqualToString: CTCallStateIncoming]) 
      { 
       NSLog(@"Incoming"); 
      } 
     }]; 

    return YES; 
} 

關於callEventHandler:當呼叫狀態改變

此屬性的塊對象上的默認優先級調度 全球調度隊列。要處理此類調用事件,請在您的應用程序中定義一個處理程序塊,並將其分配給 此屬性。您必須實現處理程序塊以支持從任何上下文中調用 。

來源:CTCallCenter Class Reference

希望它幫助。

+0

感謝您的評論。我已經嘗試過,但事件處理程序似乎沒有響應,當應用程序在後臺睡覺時調用。我在這裏做錯了什麼? – Raccoon

+0

不... ...即時做更多的測試...我會留下一個評論爲其他人如果這個工程:) – Raccoon

+0

@Raccoon我剛剛檢查了兩次,創建了一個新的iPhone項目,並使用我發佈的代碼,它適用於我。 – RaffAl