我试图检测Lync客户端中的来电。这是通过在this post
中订阅Lync客户端中的ConversationManager.ConversationAdded事件来完成的。然而,通过使用这种方法,如果在呼叫者呼叫之前与呼叫者的对话窗口已经打开,则我无法检测到来电。 例如,如果我与朋友聊天,因此有一个打开的对话窗口,而这位朋友决定给我打电话,则不会触发ConversationAdded事件。
当我与呼叫者进行了有效对话时,如何检测来电?
谢谢, 尼克拉斯
答案 0 :(得分:8)
您需要监控对话模式的状态。两种可用的模式是IM和AV,所以你需要注意这些状态的变化,如下所示:
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");
}
此示例使用ConversationAdded事件来连接事件处理程序以进行模态更改,因此这仅适用于在应用程序运行时启动的对话。要在应用程序启动之前已经处于活动状态的会话中执行相同操作,可以将此代码添加到应用程序的启动例程中:
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);
}
答案 1 :(得分:5)
您应该订阅Conversation.Modalities [ModalityTypes.AudioVideo]上的ModalityStateChanged事件,这将在创建AV模态或更改状态时为您提供事件。