iOS: ¿Notificación de cuándo se está realizando una llamada?

¿Se puede notificar o detectar cuando se está realizando una llamada GSM / CDMA en un teléfono iOS?

Tengo una aplicación que utiliza audio en segundo plano y quiero poder detectar cuándo se está produciendo una llamada para que mi aplicación pueda reactjsr en consecuencia, de modo que no interfiera en la llamada celular de todos modos.

Básicamente, quiero poder detectar cuándo se está produciendo una llamada para que, si el usuario ingresa a mi aplicación durante una llamada, pueda desactivar alguna funcionalidad.

Entonces me preguntaba cómo puedo detectar que se está produciendo una llamada celular en un dispositivo.

A partir de iOS 4, puede utilizar la class CTCallCenter en el marco Core Telephony para registrar un controller de events para que su aplicación reciba una notificación cuando comience o finalice una llamada. El CTCall que le da tiene una propiedad callState , que puede ser CTCallStateDialing , CTCallStateIncoming , CTCallStateConnected , o cuando termina, CTCallStateDisconnected .

Mira el protocolo AVAudioSessionDelegate .

Puede usar el framework de CoreTelephony. Pero debe usar alguna aplicación privada. Y tengo un código de demostración para esto. https://github.com/edison0951/AppNotifyBySMSDemo . Y la solución final es MAP. Esto es lo mismo con las notifications SMS en iOS6.

A partir de iOS 6, debe:

 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(onAudioInterruption:) name:AVAudioSessionInterruptionNotification object:session 

y entonces:

 - (void)onAudioInterruption:(NSNotification*)notification { NSDictionary *info = notification.userInfo; NSUInteger type = [[info valueForKey:AVAudioSessionInterruptionTypeKey] unsignedIntegerValue]; if (type == AVAudioSessionInterruptionTypeBegan) { // stop audio (or whatever) } else if (type == AVAudioSessionInterruptionTypeEnded) { // restart audio (or whatever) } }