2011-07-23 11 views

Respuesta

4

Sí, puede, pero no necesariamente de inmediato.

Hay un marco, llamado el marco CoreTelephony, que tiene una clase CTCallCenter. Una de las propiedades de esta clase es callEventHandler property. Este es un bloque que se dispara cuando el estado de una llamada telefónica cambia. Por ejemplo:

CTCallCenter *callCenter = ...; // get a CallCenter somehow; most likely as a global object or something similar? 

[callCenter setCallEventHandler:^(CTCall *call) { 
    if ([[call callState] isEqual:CTCallStateConnected]) { 
    //this call has just connected 
    } else if ([[call callState] isEqual:CTCallStateDisconnected]) { 
    //this call has just ended (dropped/hung up/etc) 
    } 
}]; 

Eso es realmente sobre todo lo que se puede hacer con esto. No tienes acceso a ningún número de teléfono. El único otro tidbit útil de información es una propiedad de identificador en CTCall, por lo que identifica de forma única un objeto CTCall.

PRECAUCIÓN:

Este controlador de eventos es no invoca a menos que su aplicación está en primer plano! Si realiza y recibe llamadas mientras la aplicación está en segundo plano, el controlador de eventos no activará hasta que su aplicación se vuelva a activar, momento en el que (según la documentación vinculada a arriba) se invocará el controlador de eventos una vez por cada llamada que ha cambiado de estado mientras la aplicación estaba en segundo plano.

+0

Si mi aplicación origina una llamada saliente y se suscribe al evento de desconexión, en mi controlador de eventos ¿puedo enviar un mensaje local que indique al usuario que regrese a mi aplicación? ¿O conoces una forma menos engorrosa de volver a enfocarte en una aplicación después de que finaliza una llamada saliente? – JeremyWeir

-1

No. A partir del SDK actual, esto no es posible. Apple no permite que las aplicaciones tengan tales ganchos.

+0

-1 incorrecto. Mira CoreTelephony.framework. –

+0

Hmm. No sabia sobre esto. Sin embargo, estoy en lo cierto al pensar que no puedes tener tu aplicación "despierta" en respuesta a una llamada. Tienes que esperar hasta que entre en el primer plano (por la entrada del usuario) de nuevo? –

+0

eso es correcto. Es simplemente una forma de saber que sucedieron las cosas y reaccionar ante ellas, pero solo cuando tu aplicación está activa. –

1

No, pero recibe retrollamadas en la aplicación cuando ocurren esos eventos.

-(void)applicationWillResignActive:(UIApplication *)application{ 
     //our app is going to loose focus since thier is an incoming call 
     [self pauseApp]; 
    } 

    -(void)applicationDidBecomeActive:(UIApplication *)application{ 
      //the user declined the call and is returning to our app 
      [self resumeApp]; 
    } 
+2

Esto no necesariamente significa que hay una llamada entrante. Otra aplicación, notificación o el botón de inicio lo activará. –

Cuestiones relacionadas