2010-07-23 7 views
10

현재 배경 화면에있는 응용 프로그램에서 사용자가 전화를 받았는지 여부를 감지 할 수 있는지 알고 싶습니다.iOS4에서 통화 상태 감지하기

또는 내 앱에서 통화가 시작된 경우 통화가 종료되면 알림을받습니다.

또는 심지어 그 이상 - 어떤 앱이 포 그라운드에 있는지 감지 할 수 있습니까?
나는 이것이 가능하다고 생각하지만 나는 시도해야만했다 ... ;-)

어떤 정보라도 감사 할 것입니다.

감사합니다.

+0

다른 앱에서 * 전화 * 통화를하셨습니까? 백그라운드에서 실행중인 스카이프 통화와 마찬가지로? – progrmr

+0

http://stackoverflow.com/questions/3319805/detecting-call-state-in-ios4 –

답변

20

CTCallCenter에는 호출 이벤트가 발생할 때 호출되는 블록을 전달할 수있는 callEventHandler 메서드가 있습니다. 이 블록에는 CTCall 객체가 전달되고 callState을 얻을 수 있습니다. 따라서 통화가 시작되거나 끝나면 알림을 받고이를 적절하게 처리 할 수 ​​있습니다. 통화를 시작한 응용 프로그램을 가져올 수는 없지만 전화를 걸 때 ivar를 설정하면 통화 한 응용 프로그램임을 알 수 있습니다. 예를 들어

:

CTCallCenter *callCenter = [[CTCallCenter alloc] init]; 
callCenter.callEventHandler=^(CTCall* call){ 
    if (call.callState == CTCallStateDisconnected) 
    { 
     //handle disconnect 
    } 
}; 

편집 : 귀하의 질문을 읽고 다시, 당신은 당신이 올바른 중단하는 동안 이러한 이벤트를 원하는? 나는 그것이 가능하다고 생각하지 않는다. docs에서

:

통화 이벤트가 발생하면 응용 프로그램이 활성화되어있는 경우, 시스템은 즉시 핸들러에 이벤트를 전달합니다. 그러나 통화 이벤트는 응용 프로그램이 일시 중단 된 동안에도 발생할 수 있습니다. 응용 프로그램이 일시 중지 된 동안 응용 프로그램은 통화 이벤트를 수신하지 않습니다. 응용 프로그램이 활성 상태를 다시 시작하면 응용 프로그램이 일시 중단 된 동안 통화에 발생한 상태 변경 횟수에 관계없이 상태가 변경된 각 호출에 대해 단일 호출 이벤트를받습니다. 응용 프로그램이 활성 상태로 돌아갈 때 처리기로 전송되는 단일 호출 이벤트는 해당 시점의 호출 상태를 나타냅니다.

+0

고맙습니다. 핵심 전화가 내 목표를 달성 할 수있을 것 같습니다. 백그라운드에서 앱을 가져올 수 있는지 알고 계십니까? –

+1

아니요, 혼자서 포 그라운드로 이동할 수 없습니다. 그리고 어떤 이벤트에서 제한을 받게 될 것입니다. 가장 좋은 방법은 상태 전환 알림을 수신하고 적절하게 처리하는 것입니다. Cf. http://developer.apple.com/iphone/library/documentation/iphone/conceptual/iphoneosprogrammingguide/Backgroundexecution/backgroundexecurity.html – Don

+0

감사합니다. 나는 몇 가지 iOS3 프로젝트를 고수하고 모든 iOS4 혁신을 배울 시간이 없습니다 ... –

8

당신이 경우 응용 프로그램은 백그라운드에서 실행하고, 당신은 전화가 수신 될 때 AVAudioSession이 중단되었음을 알려주는 AVAudioSessionDelegate에 콜백을받을 것 AVAudioSession을 가지고 있습니다. AFAIK는 당신이 얻는 모든 정보입니다.

+0

감사합니다. BTW는 전화 통화 중에 소리/음악을 재생할 수 없다는 뜻입니까? 내 앱이 앞에 있어도 (그리고 전화 앱이 배경에 있더라도)? –

+2

전화 중 소리를 재생하는 중에 백그라운드에서 앱에 문제가 발생했습니다. AVAudioSessionDelegate 콜백을 사용하여 중단되었는지 여부를 추적하고 중단 된 경우 앱 재생이 중지됩니다. – progrmr

관련 문제