在 Lync 中检测来电

6
我正在尝试在Lync客户端中检测来电。根据此帖子中所述,在Lync客户端中订阅ConversationManager.ConversationAdded事件即可完成此操作。
但是,如果与呼叫者的对话窗口在呼叫之前已经打开,我将无法检测到来电。例如,如果我正在与朋友聊天并因此有一个打开的对话窗口,而这个朋友决定给我打电话,则不会触发ConversationAdded事件。
我该如何在与呼叫者保持活动对话时检测到来电?
谢谢, Nicklas
2个回答

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);
}

5

您应该订阅Conversation.Modalities [ModalityTypes.AudioVideo]上的ModalityStateChanged事件,这将在AV模态创建或更改状态时为您提供事件。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接