Возьми ОпСоСа под контроль! Мингулов Денис Хакер, номер #070, стр. 070-126-2 CLogClient* logClient; CLogFilterList* filterList; CLogFilter* filter; В реализации класса используй стандартное наследование от CActive. Примеры можешь посмотреть здесь (для Series 60 SDK 2.1): \Symbian\7.0s\Series60_v21\Examples\base\ipc\async. В ConstructL() подцепляемся к серверу логов: iFs.Connect(); iLogClient = CLogClient::NewL(iFs); iLogViewEvent = CLogViewEvent::NewL(*iLogClient); filter = CLogFilter::NewL(); Для звонков используй такой фильтр, для (HS)CSD используй KLogDataEventTypeUid, факсов - KLogFaxEventTypeUid, SMS - KLogShortMessageEventTypeUid, GPRS - KLogPacketDataEventTypeUid. filter-> SetEventType( KLogCallEventTypeUid ); logViewEvent-> SetFilterL(*filter, status); В DoCancel не забудь прекратить все открытые запросы: iRecentLogView-> Cancel(); В RunL при отсутствии ошибок (iStatus == KErrNone) реализуй запрос (пример запроса последнего номера): TBuf<256> iTelNumber; const CLogEvent& event = iRecentLogView-> Event(); iTelNumber.Copy(event.Number()); А вот сама функция GetLastes: // прерываем старый запрос iRecentLogView-> Cancel(); // делаем запрос if (iRecentLogView-> SetRecentListL(KLogNullRecentList,iStatus)) SetActive(); Запрос произвольного номера делается аналогично. Обработай! Лучше все данные по тарифам и дополнительным услугам брать из собственных файлов, чтобы не требовалось переделывать программу после каких-нибудь изменений. В своих же файлах лучше хранить полученные сведения о входящих и исходящих звонках и SMS. Для работы с файлами нужно подключить заголовочный файл <f32file.h> и подсоединить к проекту библиотеку efsrv.lib. Вначале подсоединись к файл-серверу (создай сессию) - RFs::Connect(). Затем используй RFile - Open, Close, Read, Write, Seek. Пример работы с файлами RFs fsSession; User::LeaveIfError(fsSession.Connect()); RFile file; User::LeaveIfError(file.Open(fsSession,strFileName,EFileRead|EFileShareAny)); TBuf8<512> buf; file.Seek(ESeekCurrent,0); User::LeaveIfError(buf,512); file.Close(); fsSession.Close(); Сколько потратили? Итак, после обработки логов ты имеешь все данные за определенный период. Теперь хотелось бы узнать, сколько было потрачено денег. Звонки делятся на входящие, исходящие и пропущенные, которые можно не учитывать. О каждом звонке необходимо выяснить, откуда или куда он был, как его учитывать и во сколько в итоге он обойдется. Обычно звонки с местных сотовых бесплатны. Узнать принадлежность телефонного номера какому-нибудь региону в негеографических зонах (таких, как +7-9EF) можно на сайте www.mtt.ru/info (справа в справочной информации). Там же можно найти международные и междугородные коды. А вот «городские» телефонные номера, принадлежащие оператору сотовой связи, придется искать самому. Учитывай возможность сокращенного набора номера - 8 вместо +7, 8-2 для выхода в область, отсутствие кода страны и города, бесплатные номера вроде 112 и 01. Звонок может тарифицироваться поминутно, посекундно, посекундно со второй минуты, каждые 10 секунд и как угодно еще. Кроме того, наша программа должна учитывать возможность наличия платы за соединение. |