Join Now
Quality Rating:
  • Currently 0.0 / 5
(0.0 / 5 - 0 votes cast)
Expertise Level:
  • Currently 0.0 / 5
(0.0 / 5 - 0 votes cast)

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
 
Powered by MediaWiki
     
     RDF Facets:
     
     
     qfnZtypeQUqfnTypeZCommunityContentQ
     qfnZtypeQUqfnTypeZWebpageQ
     qfnZtypeQUqfnTypeZWikiContentQ
     qmarsZlanguageQUxhttpE3aE2fE2fswE2enokiaE2ecomE2flanguageE2d1E2fenX