2010-09-16 49 views
1

我希望在應用程序從後臺恢復活動狀態後檢測呼叫狀態。即時通訊使用下面這段代碼是:核心電話 - 呼叫事件處理程序

CTCallCenter *callCenter = [[CTCallCenter alloc] init]; 

callCenter.callEventHandler=^(CTCall* call) 
{ 

    if (call.callState == CTCallStateDisconnected) 
{ 

    NSLog(@"Call has been disconnected"); 

    } 

    else if (call.callState == CTCallStateConnected) 
    { 

NSLog(@"Call has just been connected"); 

    } 

else if(call.callState == CTCallStateConnected) 
    { 

    NSLog(@"Call is incoming"); 

    } 

    else 
    { 

    NSLog(@"None of the conditions"); 

    } 

}; 

現在能正常工作時,說的呼叫被用戶接收時,應用程序打開。一旦斷開呼叫,應用程序會自動回到前臺,並正確檢測到呼叫狀態已斷開。

但是,如果應用程序在接收呼叫前後臺運行,那麼當應用程序返回到前臺時,如果運行上述代碼段,則無法檢測到呼叫狀態。這令人費解,因爲蘋果文檔指出:

如果您的應用程序在發生呼叫事件時處於活動狀態,系統會立即將事件分派給您的處理程序。但是,通話事件也可能在您的應用程序暫停時發生。它被暫停時,您的應用程序不會收到通話事件。當您的應用程序恢復活動狀態時,無論呼叫在您的應用程序暫停時遇到多少狀態變化,都會爲每次更改狀態的呼叫接收單個呼叫事件。在您的應用程序返回到活動狀態時,發送到您的處理程序的單個調用事件描述了當時的調用狀態。

所以我認爲,當我的應用程序恢復活動狀態,並運行呼叫事件處理程序塊時,它應該檢測到呼叫剛斷開。但是,調用事件處理程序塊本身並未執行,即它會跳過所有「if else」條件並退出塊。

任何人都可以點亮爲什麼會發生這種情況嗎?任何幫助將非常感激。謝謝。

+0

如果你想在後臺監聽呼叫,最好的方法是成爲一個後臺應用(例如註冊一個後臺模式,「位置」)並定期檢查'callCenter.currentCalls'。查看我的答案在這裏獲取更多詳細信息:http://stackoverflow.com/questions/10102108/ctcallcenter-call-event-handler-in-background-state/39230753#39230753。 – nverinaud 2016-08-30 14:54:47

回答

3

Nathan,你是否每次應用程序進入後臺時都重新創建CTCallCenter實例? ,如果是的話,那麼這可能是問題所在。