我正在开发使用C#和Julmar.tapi3(itapi)库的固定电话应用程序, 获取callerId时,其行为不一致,逐步跟踪代码时,有时会返回callerid,大部分时间都不会返回任何内容。
我使用了搜索时找到的代码,但它返回空字符串
This Link描述了在监听模式下打开线来获取我尝试的来电显示,但仍然存在同样的问题。
我曾在某处读过必须触发CallInfoChange事件以获取CallerId,但我的情况并没有触发。
Itapi是否支持callerId
以下是我用来获取来电显示的代码
private void IncomingForm_Load(object sender, EventArgs e)
{
_tapiMgr.Initialize();
foreach (TAddress addr in _tapiMgr.Addresses)
{
if (addr.QueryMediaType(TAPIMEDIATYPES.AUDIO))
{
try
{
TAPIMEDIATYPES mt = TAPIMEDIATYPES.AUDIO;
addr.OpenAndMonitor(mt);
// addr.Open(mt);
}
catch(TapiException ex)
{
}
}
}
}
private void OnNewCall(object sender, TapiCallNotificationEventArgs e)
{
if (e.Call.Privilege == CALL_PRIVILEGE.CP_OWNER)
{ MessageBox.Show(e.Call.get_CallInfo(CALLINFO_STRING.CIS_CALLERIDNUMBER).ToString());
}
}
答案 0 :(得分:0)
在大多数系统上,来电显示不会立即生效。在北美,呼叫者ID在第一次响铃后发送。要可靠地获取调用者ID,除了NewCall事件之外,还需要处理CallInfo事件。如果您的NewCall事件处理程序中没有调用者ID,则稍后在CallInfo事件被触发时它将可用。