Как получить SIP URI входящего звонка VOIP
Метаданные
Статья
Перевод:
Оригинал: How to get incoming voip call sip uri
Последнее редактирование: hamishwillee
(09 Dec 2011)
Класс CTelephony не поддерживает VoIP звонки. Поэтому вы не можете использовать NotifyCall и GetCallInfo чтобы определить входящего VoIP звонка и получить номер звонящего. Решением в этой ситуации может служить использование Logengine для получения VoIP SIP URI входящего звонка.
Это демонстрирует следующий пример:
Подключите заголовочные файлы
#include <LogCli.h>
#include <LOGWRAP.H>
#include <LogViewChangeObserver.h>
#include <LOGVIEW.H>
#include <eikenv.h>
Подключите следующие библиотеки
logcli.lib logwrap.lib eikcore.lib
- 1. Создайте Активный объект (наследуемый от класса CActive).
- 2. Добавьте в предки класса класс MLogViewChangeObserver и реализуйте его виртуальные функции:
- HandleLogViewChangeEventAddedL
- HandleLogViewChangeEventChangedL
- HandleLogViewChangeEventDeletedL
- 3. Объявите следующие члены класса:
CLogClient* iClient;
CLogEvent* iLogEvent;
CLogViewEvent* iLogViewEvent;
CLogFilter* iLogFilter;
- 4. В ConstructL() добавьте:
// Создаем объекты LogClient, Logevent, Logfilter, Logviewevent
// используем уже созданную RFs сессию, вместо того, чтобы создать новую
iClient=CLogClient::NewL(CEikonEnv::Static()->FsSession(),CActive::EPriorityHigh);
iLogEvent=CLogEvent::NewL();
iLogViewEvent = CLogViewEvent::NewL(*iClient,*this);
iLogFilter = CLogFilter::NewL();
// Установим фильтр по типу события: звонок
iLogFilter->SetEventType(KLogCallEventTypeUid);
//Установим фильтр, исключающий все вызовы,
//кроме пропущенных
TBuf<20> string;
iClient->GetString(string,R_LOG_DIR_MISSED);
iLogFilter->SetDirection(string);
iLogViewEvent->SetFilterL(*iLogFilter,iStatus);
SetActive();
- 5. HandleLogViewChangeEventAddedL вызывается, когда в лог добавляется событие, удовлетворяющее заданному фильтру.
void CNotifyCall::HandleLogViewChangeEventAddedL(TLogId aId,
TInt /*aViewIndex*/, TInt /*aChangeIndex*/, TInt /*aTotalChangeCount*/)
{
// Получим событие по его id
// aId содержит Id добавляемого в систему события
iLogEvent->SetId(aId);
//Получим событие
iClient->GetEvent(*iLogEvent,iStatus);
SetActive();
}
- 6. В RunL() добавьте следующее:
//В случае обычного телефонного звонка, Number содержит номер звонящего
TBuf<128> callNameBuf=iLogEvent->Number();
CEikonEnv::InfoWinL(_L("Incoming call Number"),callNameBuf);
// Remote party содержит voip sip uri звонящего
callNameBuf.Copy(iLogEvent->RemoteParty());
CEikonEnv::InfoWinL(_L("Remote party"),callNameBuf);


(no comments yet)