2010-07-23 7 views
10

Me gustaría saber si existe la posibilidad de detectar si el usuario está en una llamada desde una aplicación que está actualmente en segundo plano.Detectando el estado de la llamada en iOS4

O reciba una notificación cuando la llamada finalice si la llamada se inició desde mi aplicación.

O, incluso más que eso, ¿existe la posibilidad de detectar qué aplicación está en primer plano?
No creo que esto sea posible pero tuve que intentar ... ;-)

Cualquier información será apreciada.

Gracias.

+0

¿Quiere decir en un * teléfono * llamar en otra aplicación? ¿Como en una llamada en Skype ejecutándose en segundo plano? – progrmr

+0

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

Respuesta

20

En CTCallCenter, existe un método, callEventHandler que puede pasar un bloque que se llamará cuando ocurran eventos de llamada. En este bloque, se le pasará un objeto CTCall, y puede obtener el callState. Por lo tanto, puede recibir una notificación cuando se inicia o finaliza una llamada y manejarla adecuadamente. No puede obtener la aplicación que inició la llamada, pero si establece un ivar cuando realiza la llamada, puede indicar que es su aplicación la que realizó la llamada.

Por ejemplo:

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

EDIT: Al volver a leer su pregunta, desea que estos eventos mientras está suspendida, correcto? No creo que eso sea posible.

Desde el docs:

Si la aplicación está activa cuando un evento de llamada se lleva a cabo, el sistema distribuye el evento al controlador de inmediato. Sin embargo, los eventos de llamada también pueden tener lugar mientras se suspende su aplicación. Mientras está suspendido, su aplicación no recibe eventos de llamadas. Cuando su aplicación reanuda el estado activo, recibe un único evento de llamada para cada llamada que cambió de estado, sin importar cuántos cambios de estado experimentó la llamada mientras se suspendió su aplicación. El evento de llamada única enviado a su controlador, cuando su aplicación vuelve al estado activo, describe el estado de la llamada en ese momento.

+0

Gracias. Parece que Core Telefonía puede cumplir mi objetivo. ¿Sabes si puedo llevar mi aplicación al frente desde el fondo? –

+1

No, no puedes moverte al primer plano por ti mismo. Y, estarás limitado en lo que eventos recibas. Lo mejor que puede hacer es escuchar las notificaciones de transición de estado y manejar las cosas de manera apropiada. Cf. http://developer.apple.com/iphone/library/documentation/iphone/conceptual/iphoneosprogrammingguide/BackgroundExecution/BackgroundExecution.html – Don

+0

Gracias. Estoy atrapado en algunos proyectos de iOS3 y no tengo tiempo para aprender todas las innovaciones de iOS4 ... –

8

Si estás aplicación se está ejecutando en segundo plano y tiene un AVAudioSession ir, recibirá devoluciones de llamada en la que le dice que AVAudioSessionDelegate su AVAudioSession se ha interrumpido cuando se recibe una llamada telefónica. AFAIK esa es toda la información que obtienes.

+0

Gracias. Por cierto, ¿significa que no puedo reproducir sonidos/música durante una llamada telefónica? Incluso si mi aplicación está en el frente (y la aplicación del teléfono está en segundo plano)? –

+2

Tuve un problema con mi aplicación (en el fondo) reproduciendo sonidos durante una llamada telefónica. Utilicé las devoluciones de llamada AVAudioSessionDelegate para mantener un registro de si se ha interrumpido o no y, si se interrumpe, la aplicación deja de reproducir sonidos. – progrmr

Cuestiones relacionadas