6

Lyncクライアントで着信を検出しようとしています。これは、この投稿で説明されているように、LyncクライアントでConversationManager.ConversationAddedイベントをサブスクライブすることによって行われます。

ただし、この方法を使用すると、発信者が電話をかける前に発信者との会話ウィンドウがすでに開いている場合、着信を検出できません。たとえば、友人とチャットしているために会話ウィンドウが開いていて、この友人が私に電話をかけることにした場合、ConversationAddedイベントはトリガーされません。

発信者とすでにアクティブな会話をしているときに、着信を検出するにはどうすればよいですか?

ありがとう、ニクラス

4

2 に答える 2

8

会話のモダリティの状態を監視する必要があります。利用可能な 2 つのモダリティは 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);
}
于 2012-02-09T10:05:28.370 に答える
5

Conversation.Modalities[ModalityTypes.AudioVideo] で ModalityStateChanged イベントをサブスクライブする必要があります。これにより、AV モダリティが作成されたとき、または状態が変更されたときにイベントが提供されます。

于 2012-02-09T10:04:46.850 に答える