×
Namespaces

Variants
Actions

Отслеживание состояния батареи с помощью CTelephony

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

Статья
Перевод:
truf
Последнее редактирование: hamishwillee (16 Dec 2011)

Этот пример демонстрирует возможность отслеживания текущего состояния батареи с помощью 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);
}



Внутренние ссылки

This page was last modified on 16 December 2011, at 07:32.
52 page views in the last 30 days.
×