×
Namespaces

Variants
Actions

Как получить SIP URI входящего звонка VOIP

From Nokia Developer Wiki
Jump to: navigation, search
Article Metadata

Статья
Перевод:
truf
Последнее редактирование: 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
  • 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);
This page was last modified on 9 December 2011, at 02:04.
73 page views in the last 30 days.

Was this page helpful?

Your feedback about this content is important. Let us know what you think.

 

Thank you!

We appreciate your feedback.

×