2012-02-09 13 views
6

Estoy tratando de detectar una llamada entrante en el cliente de Lync. Esto se hace suscribiéndose al evento ConversationManager.ConversationAdded en el cliente Lync como se describe en this postDetectando una llamada entrante en Lync

Sin embargo, al usar este método no puedo detectar las llamadas entrantes si una ventana de conversación con la persona que llama ya está abierta antes de que la persona que llama esta llamando. Por ejemplo, si estoy chateando con un amigo y, por lo tanto, tengo una ventana de conversación abierta y este amigo decide llamarme, el evento ConversaciónAdded no se desencadena.

¿Cómo detectaría las llamadas entrantes cuando ya tengo una conversación activa con la persona que llama?

Gracias, Nicklas

Respuesta

5

Usted debe suscribirse al evento ModalityStateChanged en Conversation.Modalities [ModalityTypes.AudioVideo], esto le dará eventos cuando se crea la modalidad AV o cambia de estado.

8

Debe supervisar los estados de las modalidades en la conversación. Las dos modalidades disponibles son la mensajería instantánea y AV, por lo que tendrá que observar los cambios del estado de estos, así:

void ConversationManager_ConversationAdded(object sender, Microsoft.Lync.Model.Conversation.ConversationManagerEventArgs e) 
{ 
    e.Conversation.Modalities[ModalityTypes.InstantMessage].ModalityStateChanged += IMModalityStateChanged; 
    e.Conversation.Modalities[ModalityTypes.AudioVideo].ModalityStateChanged += AVModalityStateChanged; 
} 

void IMModalityStateChanged(object sender, ModalityStateChangedEventArgs e) 
{ 
    if (e.NewState == ModalityState.Connected) 
     MessageBox.Show("IM Modality Connected"); 
} 

void AVModalityStateChanged(object sender, ModalityStateChangedEventArgs e) 
{ 
    if (e.NewState == ModalityState.Connected) 
     MessageBox.Show("AV Modality Connected"); 
} 

Esta muestra está utilizando el evento ConversationAdded que cablear los controladores de eventos para los cambios de modalidad, por lo esto solo funcionará para las conversaciones que se inician mientras se está ejecutando su aplicación. Para hacer lo mismo con las conversaciones que ya están activas antes de que se inicie la aplicación, puede agregar este código a la rutina de inicio de su aplicación:

foreach (var conv in _lync.ConversationManager.Conversations) 
{ 
    conv.Modalities[ModalityTypes.InstantMessage].ModalityStateChanged += new EventHandler<ModalityStateChangedEventArgs>(IMModalityStateChanged); 
    conv.Modalities[ModalityTypes.AudioVideo].ModalityStateChanged += new EventHandler<ModalityStateChangedEventArgs>(AVModalityStateChanged); 
} 
Cuestiones relacionadas