检测对话是传入还是传出



>我使用 Lync SDK 2013 并尝试检查新对话是传入还是传出。我不想只检查音频/视频通话,我想签入每种形式类型。

private void Conversation_Added(object sender, ConversationManagerEventArgs e)
{
Conversation conversation = e.Conversation;
IDictionary<ModalityTypes, Modality> modalities = conversation.Modalities;
bool conversationIsIncoming = modalities.Any(modality => modality.Value.State == ModalityState.Notified);
}

当事件被触发并且涉及到Any方法时,我收到此错误

NullReferenceException对象引用未设置为对象的实例。 System.Collections.Generic.KeyValuePair.Value.get 返回空值。

所以显然我必须在这里使用空检查,但也许整个代码可能是错误的?如何检查对话是传入还是传出?

您的想法基本上是正确的,但是当您检查通知状态时不正确。

您需要挂钩 ModalityStateChanged 事件,如果您只想了解音频/视频"呼叫",则也只需要挂钩具有音频视频模态类型的对话。

例如

private void ConversationManager_ConversationAdded(object sender, ConversationManagerEventArgs e)
{
if (e.Conversation.Modalities.TryGetValue(ModalityTypes.AudioVideo, out var avModality))
{
avModality.ModalityStateChanged += AvModalityOnStateChanged;
}
}
private void AvModalityOnStateChanged(object sender, ModalityStateChangedEventArgs e)
{
if (e.NewState == ModalityState.Notified)
{
bool conversationIsIncoming = true;
}
}

不要忘记从 ModalityStateChanged 中解脱钩,当你不再需要知道状态变化时。

最新更新