我希望在應用程序從後臺恢復活動狀態後檢測呼叫狀態。即時通訊使用下面這段代碼是:核心電話 - 呼叫事件處理程序
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」條件並退出塊。
任何人都可以點亮爲什麼會發生這種情況嗎?任何幫助將非常感激。謝謝。
如果你想在後臺監聽呼叫,最好的方法是成爲一個後臺應用(例如註冊一個後臺模式,「位置」)並定期檢查'callCenter.currentCalls'。查看我的答案在這裏獲取更多詳細信息:http://stackoverflow.com/questions/10102108/ctcallcenter-call-event-handler-in-background-state/39230753#39230753。 – nverinaud 2016-08-30 14:54:47