This page was last modified 19:15, 1 January 2008.
Отслеживание состояния батареи с помощью CTelephony
From Forum Nokia Wiki
Перевод с английского, оригинальная статья находится здесь.
Этот пример демонстрирует возможность отслеживания текущего состояния батареи с помощью CTelephony API в устройстве на базе Symbian 3-й редакции.
Пример очень простой, для его использования достаточно реализовать функцию обратного вызова и создать экземпляр класса CBatteryCheck.
При создании экземпляра CBatteryCheck, начальный уровень заряда батареи будет получен с помощью асинхронного запроса GetBatteryInfo(). После его завершения и вызова RunL(), все изменения будут отслеживаться с помощью NotifyChange().
В функции обратного вызова аргумент aChangeStatus содержит уровень заряда батареи в процентах, а aStatus - текущем состоянием батареи:
- CTelephony::EPoweredByBattery- Штатный режим работы.
- CTelephony::EBatteryConnectedButExternallyPowered - Подключено зарядное устройство.
- CTelephony::ENoBatteryConnected - Нет батареи (питание от зарядного устройства).
- CTelephony::EPowerStatusUnknown - Состояние неизвестно.
BatteryLevel.h
#include <Etel3rdParty.h> class MBatteryObserver { public: virtual void BatteryLevelL(TUint aChargeStatus, CTelephony::TBatteryStatus aStatus) = 0; }; class CBatteryCheck : public CActive { public: CBatteryCheck(MBatteryObserver& aObserver); void ConstructL(void); ~CBatteryCheck(); private: void GetBatteryInfo(); void RunL(); void DoCancel(); private: MBatteryObserver& iObserver; CTelephony* iTelephony; CTelephony::TBatteryInfoV1 iBatteryInfoV1; CTelephony::TBatteryInfoV1Pckg iBatteryInfoV1Pckg; TBool iGettingBattery; };
BatteryLevel.cpp
CBatteryCheck::~CBatteryCheck() { Cancel(); delete iTelephony; } void CBatteryCheck::ConstructL(void) { iTelephony = CTelephony::NewL(); GetBatteryInfo(); } CBatteryCheck::CBatteryCheck(MBatteryObserver& aObserver) : CActive(EPriorityStandard),iObserver(aObserver),iBatteryInfoV1Pckg(iBatteryInfoV1) { CActiveScheduler::Add(this); } void CBatteryCheck::GetBatteryInfo() { if(iTelephony && !IsActive()) { iGettingBattery = ETrue; iTelephony->GetBatteryInfo(iStatus, iBatteryInfoV1Pckg); SetActive(); } } void CBatteryCheck::RunL() { iObserver.BatteryLevelL(iBatteryInfoV1.iChargeLevel,iBatteryInfoV1.iStatus); if(iStatus != KErrCancel) { iTelephony->NotifyChange(iStatus,CTelephony::EBatteryInfoChange, iBatteryInfoV1Pckg); SetActive(); } iGettingBattery = EFalse; } void CBatteryCheck::DoCancel() { if(iGettingBattery) iTelephony->CancelAsync(CTelephony::EGetBatteryInfoCancel); else iTelephony->CancelAsync(CTelephony::EBatteryInfoChangeCancel); }
Внутренние ссылки
| Related Discussions | ||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| Please help me about getting IMSI of Nokia 6630 | sunrenfei | General Symbian C++ | 5 | 2006-08-08 09:16 |
| CTelephony Help | lalitjadiya | General Symbian C++ | 2 | 2008-06-18 10:03 |
| CTelephony API ? | lucca99 | General Symbian C++ | 13 | 2007-02-16 12:13 |
| NokiaCLFileTransfer | soumi | Russian Developer Forum - Форум Российских разработчиков | 3 | 2008-07-02 09:50 |
| CellId == NULL | MariaManrique | Symbian Networking & Messaging | 16 | 2007-12-09 19:35 |
