This page was last modified 12:25, 8 November 2007.
Как получить SIP URI входящего звонка VOIP
From Forum Nokia Wiki
Перевод с английского, оригинальная статья находится здесь.
Класс 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);
| Related Discussions | ||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| Inbound VoIP Call | gammav | VoIP | 4 | 2008-06-21 18:21 |
| SIP in Python | krtrivdi | Python | 2 | 2007-08-22 10:21 |
| Is it possible to get a list of access points from the device? | nbdr | OMA DM/DS/CP | 2 | 2008-04-24 09:15 |
| Nokia sip server (500 internal error) | Sandra82 | General Symbian C++ | 2 | 2005-01-04 19:00 |
| Provision VoIP settings over-the-air - how? | willneale | VoIP | 8 | 2008-02-26 10:41 |
