На главную SpbMap

Управление индикаторами в Symbian приложениях. Часть 1 - Индикатор сигнала, заряда батареи, вызова



Управление индикатором сигнала

Индикатор сигнала - один из элементов панели статуса, расположенный в левой части экрана. Этот индикатор может отображать восемь уровней сигнала, называемых Level 0, Level 1 и т.д. до Level 7.


Рис 1. - Восемь состояний индикатора сигнала

В Symbian 2-й редакции, существует класс позволяющий пользователю контролировать состояние этого индикатора. Он находится в библиотеке aknnotify.lib и называется CAknSignalNotify.

Помимо прочего, CAknSignalNotify может быть использован для изменения состояний GPRS соединения.


Рис 2. - Состояния GPRS соединения

CAknSignalNotify содержит следующие функции:

Примечание: реализация функций SetWcdmaStateL(), SetCdmaStateL() и SetCommonPacketDataStateL() может отсутствовать на GSM телефонах. В этом случае попытка обращения к ним приведет к завершению работы приложения без сообщения об ошибке.

AknSignalNotify.h

#include <AknNotify.h>
 
class CAknSignalNotify : public CAknNotifyBase
    {
public:
     IMPORT_C static CAknSignalNotify* NewL();
     IMPORT_C static CAknSignalNotify* NewLC();
     IMPORT_C ~CAknSignalNotify();
 
     IMPORT_C void SetGprsStateL(TInt aState);
     IMPORT_C void SetSignalLevelL(TInt aLevel);
     IMPORT_C void SetCommonPacketDataStateL(TInt aState);
     IMPORT_C void SetWcdmaStateL(TInt aState);
     IMPORT_C void SetCdmaStateL(TInt aState);
private:
     CAknSignalNotify();
     void ConstructL();
private:
     IMPORT_C void CAknNotifyBase_Reserved();
    };

Использование CAknSignalNotify

Изменения индикатора, вызванные экземпляром класса CAknSignalNotify, сохраняются до тех пор, пока его состояние не изменит система, или другой экземпляр CAknSignalNotify. Поэтому, его можно удалить сразу после использования. К примеру: следующий код установит индикатор сигнала в максимальное состояние (Level 7). Не забудьте подключить библиотеку aknnotify.lib к вашему проекту.

CAknSignalNotify* AknSignalNotify= CAknSignalNotify::NewLC();
AknSignalNotify->SetSignalLevelL(7);
CleanupStack::PopAndDestroy();

Примечание: вы можете объявить перечисление для использования в SetBatteryLevelL():

enum TSignalLevel
{
 ELevel0,
 ELevel1,
 ELevel2,
 ELevel3,
 ELevel4,
 ELevel5,
 ELevel6,
 ELevel7
};

Аргумент функции SetGprsStateL() может принимать любое значение, но какой-либо эффект на индикатор оказывают следующие:

  1. Под линейкой уровня сигнала отображается антенна.
  2. Отображается символ G (GPRS attached).
  3. Мерцающий символ G.
  4. G в квадратике (GPRS Context).
  5. Зачеркнутое G (GPRS Suspended).
  6. G в квадратике подчеркнутое один раз.

Здесь вы можете скачать демонстрационным пример.

Управление индикатором заряда батареи

Индикатор заряда батареи - один из элементов панели статуса, расположенный в правой части экрана. Этот индикатор может отображать восемь уровней заряда батареи, называемых Level 0, Level 1 и т.д. до Level 7. Во время подзарядки батареи с помощью зарядного устройства, индикатор постоянно меняется, пробегая все значения от разряженного до полностью заряженного. Индикатор может принимать восемь различных состояний.


Рис. 3 - Восемь состояний индикатора заряда батареи

В Symbian 2-й редакции, существует класс позволяющий пользователю контролировать состояние этого индикатора. Он также находится в библиотеке aknnotify.lib и называется CAknBatteryNotify.

CAknBatteryNotify содержит следующие функции:

AknBatteryNotify.h

#include <AknNotify.h>
class CAknBatteryNotify : public CAknNotifyBase
 {
public:
 IMPORT_C static CAknBatteryNotify* NewL();
 IMPORT_C static CAknBatteryNotify* NewLC();
 IMPORT_C ~CAknBatteryNotify();
 IMPORT_C void NotChargingL();
 IMPORT_C void SetBatteryLevelL(TInt aLevel);
 IMPORT_C void StartChargingL();
 IMPORT_C void StopChargingL();
private:
 CAknBatteryNotify();
 void ConstructL();
private:
 IMPORT_C void CAknNotifyBase_Reserved();
 };

Использование CAknBatteryNotify

Изменения индикатора, вызванные экземпляром класса CAknBatteryNotify, сохраняются до тех пор, пока его состояние не изменит система, или другой экземпляр CAknBatteryNotify. Поэтому, его можно удалить сразу после использования. К примеру: следующий код установит индикатор в полностью заряженное состояние (Level 7). Не забудьте подключить библиотеку aknnotify.lib к вашему проекту.

CAknBatteryNotify* AknBatteryNotify = CAknBatteryNotify::NewLC();
AknBatteryNotify->SetBatteryLevelL( 7 );
CleanupStack::PopAndDestroy();

Примечание: вы можете объявить перечисление для использования в SetBatteryLevelL():

enum TBatteryLevel
{
 ELevel0,
 ELevel1,
 ELevel2,
 ELevel3,
 ELevel4,
 ELevel5,
 ELevel6,
 ELevel7
};

Здесь вы можете скачать демонстрационным пример.

Управление индикатором вызова

Индикатор вызова - иконка (иногда мерцающая, см. рис.), появляющаяся в правом верхнем углу экрана в том случае, если телефон не может отобразить полноценное окно вызова.


Рис 4. - Различные индикаторы вызова

Во 2-й редакции Symbian вы можете отобразить или скрыть этот индикатор, не зависимо от того, имеется ли входящий звонок или нет. Для этого вы должны воспользоваться классом CAknIncallBubble из aknnotify.lib. Заголовок для этого класса в SDK не включен, но используемое им перечисление TAvkonIncallStatusBubbleFlags доступно в avkon.hrh, а сам класс по структуре очень прост и полностью соответствует CAknPopupNotify, так что воссоздать его заголовочный файл не составляет большого труда.

Файл AknIncallBubble.h

// INCLUDES
#include <e32std.h>
#include <e32base.h>
#include <AknNotify.h>
 
 
    /* CAknIncallBubble flags
    * Bit Explanation
    * 0 and 1 Call state
    * 2 No Ciphering
    * 3 Is muted
    * 4 Is Visible
    * 5 Is a Fax
    * 6 Is a Data call
    * 7 Is a Hscsd data call
    * 8 Line 2 indication
    * 9 Is a Video call
    * 10 Is an emergency call
    */
 
/* Следующее перечисление можно найти в avkon.hrh:
 
 enum TAvkonIncallStatusBubbleFlags
    {
    EAknStatusBubbleAlerting = 0x00, // One of
    EAknStatusBubbleActive = 0x01, // these
    EAknStatusBubbleOnHold = 0x02, // to set
    EAknStatusBubbleDisconnected = 0x03, // the call state
    EAknStatusBubbleNoCiphering = 0x04,
    EAknStatusBubbleMuted = 0x08,
    EAknStatusBubbleVisible = 0x10,
    EAknStatusBubbleFax = 0x20,
    EAknStatusBubbleData = 0x40,
    EAknStatusBubbleDataHscsd = 0x80,
    EAknStatusBubbleLine2 = 0x100,
    EAknStatusBubbleVideo = 0x200,
    EAknStatusBubbleEmergency = 0x400
    };
*/
 
 
// CLASS DECLARATION
 
/**
* CAknIncallBubble
*
*/
class CAknIncallBubble : public CBase
{
public: // Constructors and destructor
 
IMPORT_C static CAknIncallBubble* NewL();
IMPORT_C static CAknIncallBubble* NewLC();
IMPORT_C ~CAknIncallBubble();
 
IMPORT_C void SetIncallBubbleFlagsL(int aMessage);
 
private:
          CAknIncallBubble();
          void ConstructL();
 
IMPORT_C void CAknNotifyBase_Reserved();
 
};

Использование CAknIncallBubble

Подключите AknIncallBubble.h к своему проекту, и используйте следующий код:

CAknIncallBubble* IncallBubble = CAknIncallBubble::NewLC();
IncallBubble->->SetIncallBubbleFlagsL(EAknStatusBubbleVisible | EAknStatusBubbleAlerting);
CleanupStack::PopAndDestroy(IncallBubble);

Демонстрационный проект


Рис 5. - Демонстрационный проект
Здесь находится демонстрационный проект, позволяющий поэксперементировать с различными флагами CAknIncallBubble.

Автор: TR"]F



На главную SpbMap

Hosted by uCoz