Управление индикаторами в Symbian 2nd ed.

Управление индикаторами в Symbian 2nd ed.

Автор: А. Труфанов.

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

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

 


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

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

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

 


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

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

  • void SetSignalLevelL(TInt aLevel) - установка состояния индикатора. Аргумент aLevel может принимать значения от 0 до 7.
  • void SetGprsStateL() - установка состояния GPRS соединения.
  • void SetWcdmaStateL() - установка состояния WCDMA.
  • void SetCdmaStateL() - установка состояния CDMA.
  • void SetCommonPacketDataStateL() - установка состояния Common Packet Data.

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

AknSignalNotify.h

#include
 
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 содержит следующие функции:

  • void StartChargingL() - индикатор начинает пробегать все свои возможные состояния, как при зарядке батареи.
  • void StopChargingL() - индикатор прекращает изменять свое состояние, последнее состояние индикатора становится его текущим состоянием.
  • void NotChargingL() - индикатор прекращает изменять свое состояние, Level 0 становится его текущим состоянием.
  • void SetBatteryLevelL(TInt aLevel) - установка состояния индикатора. Аргумент aLevel может принимать значения от 0 до 7.

AknBatteryNotify.h

#include
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
#include
#include
 
 
    /* 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.