コール状態とコール情報をデータベーステーブルに記録するアプリケーションがあります。 interop.TAPI3Lib dllとTAPI3ドライバを使用して呼び出し情報に接続します。以下は TAPI 3デバイスがハンズフリーの状態でコール状態イベントが発生しない
は私が考えて関連するコードの一部である私はCallStateイベントtapi.EventFilter = (int)(TAPI3Lib.TAPI_EVENT.TE_CALLSTATE);
tapi.ITTAPIEventNotification_Event_Event += new
TAPI3Lib.ITTAPIEventNotification_EventEventHandler(tapi_ITTAPIEventNotification_Event_Event);
そして、私は
RegEventsResult[line] =
tapi.RegisterCallNotifications(
address,
true,
false,
TAPI3Lib.TapiConstants.TAPIMEDIATYPE_AUDIO, 2);
を監視する各デバイス(アドレス)を登録するために聞く
次に、コール状態の変更の結果を記録します。
private void tapi_ITTAPIEventNotification_Event_Event(TAPI3Lib.TAPI_EVENT TapiEvent, object pEvent)
{
string callerID, group, extension;
long origin;
TAPI3Lib.ITAddress address;
switch (TapiEvent)
{
case TAPI3Lib.TAPI_EVENT.TE_CALLSTATE:
TAPI3Lib.ITCallStateEvent callStateEvent = (TAPI3Lib.ITCallStateEvent)pEvent;
TAPI3Lib.ITCallInfo call = callStateEvent.Call;
extension = call.Address.DialableAddress;
address = call.Address;
switch (call.CallState)
{
case TAPI3Lib.CALL_STATE.CS_INPROGRESS:
callerID = call.get_CallInfoString(TAPI3Lib.CALLINFO_STRING.CIS_CALLERIDNUMBER);
group = call.get_CallInfoString(TAPI3Lib.CALLINFO_STRING.CIS_CALLEDIDNAME);
AddLog("InProgress", callerID, group, extension);
break;
case TAPI3Lib.CALL_STATE.CS_CONNECTED:
callerID = call.get_CallInfoString(TAPI3Lib.CALLINFO_STRING.CIS_CALLERIDNUMBER);
group = call.get_CallInfoString(TAPI3Lib.CALLINFO_STRING.CIS_CALLEDIDNAME);
AddLog("Connected", callerID, group, extension);
break;
case TAPI3Lib.CALL_STATE.CS_OFFERING:
callerID = call.get_CallInfoString(TAPI3Lib.CALLINFO_STRING.CIS_CALLERIDNUMBER);
group = call.get_CallInfoString(TAPI3Lib.CALLINFO_STRING.CIS_CALLEDIDNAME);
AddLog("Offering", callerID, group, extension);
break;
case TAPI3Lib.CALL_STATE.CS_DISCONNECTED:
AddLog("Disconnected", "", "", extension);
resetNotification(extension, address);
break;
case TAPI3Lib.CALL_STATE.CS_IDLE:
AddLog("Idle", "", "", extension);
break;
}
break;
}
}
これは問題なく動作します。特に、切断するたびにデバイスを再登録すると問題はありません。
ただし、ユーザーが端末でハンズフリーに切り替わった場合、自動的に通話が行われるため、通話状態のイベントは発生しません。
このコール中にデバイスを手動で再登録すると、接続されたコール状態イベントが発生します。
デバイスをハンズフリーにすると、コール状態イベントに何らかの影響がありますか?
私はあなたのコードを詳しく見ていませんが、.NETからTAPIに直接話すことに注意してください。ガベージコレクタと自動生成されたCOM interopレイヤはうまく動作せず、動作しているように見えますが、間違った問題が繰り返し発生します。 TAPIを.NETに適切に公開するサードパーティライブラリがあります。また、C++/CLIラッパーを自分で作成する方法もあります。がんばろう! –